![深入字典的价值](https://linux22.com/image/751586/%E6%B7%B1%E5%85%A5%E5%AD%97%E5%85%B8%E7%9A%84%E4%BB%B7%E5%80%BC.png)
有没有一种简单的方法可以访问嵌套字典中的值,并且不会在其中一个字典存在时出错。不知道该怎么称呼它,但建议这样称呼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
),您必须提供一些默认值。