深入字典的价值

深入字典的价值

有没有一种简单的方法可以访问嵌套字典中的值,并且不会在其中一个字典存在时出错。不知道该怎么称呼它,但建议这样称呼ECMAScript 的可选链我发现的唯一的东西是关闭 PR用于添加“safe_item”,但它已被关闭。

我正在尝试设置执行类似的操作,但是当尚未设置时(例如当其中一个主机关闭时)"{{ hostvars[item].ip_addr | default(hostvars[item]['ansible_default_ipv4']['address']) }}"不会出现错误。ansible_default_ipv4

类似的东西"{{ hostvars[item].ip_addr | default(hostvars[item] | getattr(['ansible_default_ipv4', 'address'], omit)) }}"就很棒了。

答案1

虽然有点丑陋,但你可以嵌套default过滤器:

{{ hostvars[item].ip_addr | default(hostvars[item]['ansible_default_ipv4']['address'] | default(omit)) }}

请注意,omit仅在为模块参数提供非必需值时才有效。在其他情况下(例如使用 设置 var 值set_fact),您必须提供一些默认值。

相关内容