Ansible-如何比较两个具有相同键的字典

时间:2019-10-21 12:54:35

标签: 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

但是我又一次感到困惑,我该如何比较它们……当然,我可以循环两个指令并将它们一一比较,但是看起来并不十分有效。 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

  

问:“如何比较两个具有相同键的字典?”

A:例如,如果源键组和目标键组之间没有差异,则下面的循环比较键。

  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"

给予

"msg": "MyFlag1 is KO"
"msg": "MyFlag2 is OK"
"msg": "myFlag3 is OK"

出于调试目的,可以先比较键。例如

- debug:
    msg: |
      {% if source_list.keys()|symmetric_difference(target_list.keys())|length == 0 %}
      True
      {% else %}
      False
      {% endif %}