Dictionary Ansible-如何比较两个键相同的词典
我有两本字典:Dictionary Ansible-如何比较两个键相同的词典,dictionary,ansible,compare,Dictionary,Ansible,Compare,我有两本字典: source_list: myFlag1: true MyFlag2: false 第二条: target_list: MyFlag1: false MyFlag2: false 钥匙总是一样的,但顺序并不严格。 我如何突出它们之间的区别? 我可以使用dict2items将列表转换为 source_list: - key: MyFlag1 value: true - key: MyFlag2 value: false 但我又一次感到困
source_list:
myFlag1: true
MyFlag2: false
第二条:
target_list:
MyFlag1: false
MyFlag2: false
钥匙总是一样的,但顺序并不严格。
我如何突出它们之间的区别?
我可以使用dict2items将列表转换为
source_list:
- key: MyFlag1
value: true
- key: MyFlag2
value: false
但我又一次感到困惑,我怎样才能比较它们。。。当然,我可以循环两个dict并逐个比较,但它看起来并不是很有效。
任何帮助都将不胜感激
问:“如何比较两个键相同的词典?”
答:例如,如果源密钥集和目标密钥集之间没有差异,下面的循环将比较密钥
vars:
source_list:
MyFlag1: true
myFlag3: true
MyFlag2: false
target_list:
myFlag3: true
MyFlag1: false
MyFlag2: false
tasks:
- debug:
msg: "{{ item }} is {{ (source_list[item] == target_list[item])|
ternary('OK', 'KO') }}"
loop: "{{ source_list.keys()|sort }}"
when: "source_list.keys()|
symmetric_difference(target_list.keys())|
length == 0"
给予
为了进行调试,可以先比较键。比如说
- debug:
msg: |
{% if source_list.keys()|symmetric_difference(target_list.keys())|length == 0 %}
True
{% else %}
False
{% endif %}
弗拉基米尔,你的密码显示了错误<代码>条件检查“source_list.keys()| symmetric_difference(target_list.keys())| length==0”失败。错误是:{%if source_list.keys()| symmetric_difference(target_list.keys())| length==0%}True{%else%}False{%endif%}上发生意外的模板类型错误:+:'dict_key'和'dict_key'我使用Python3。解决方案是使用|列表过滤器将.keys()方法返回的dict|u keys对象转换为一个简单的列表。非常感谢Vladimir!
- debug:
msg: |
{% if source_list.keys()|symmetric_difference(target_list.keys())|length == 0 %}
True
{% else %}
False
{% endif %}