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 %}