Ansible - как сравнить два словаря с одинаковыми ключами - PullRequest
1 голос
/ 21 октября 2019

У меня есть два словаря:

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 голосов
/ 21 октября 2019

Q: «Как сравнить два словаря с одинаковыми ключами?»

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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...