dictionary - Ansible - 如何比较具有相同键的两个字典
问题描述
我有两个字典:
source_list:
myFlag1: true
MyFlag2: false
第二个字典:
target_list:
MyFlag1: false
MyFlag2: false
键总是相同的,但顺序并不严格。我如何突出它们之间的区别?我可以使用 dict2items 将列表转换为
source_list:
- key: MyFlag1
value: true
- key: MyFlag2
value: false
但是我又很困惑,我该如何比较它们......当然,我可以遍历两个字典并一一比较,但它看起来并不真正有效。任何帮助将不胜感激!
解决方案
问:“如何比较具有相同键的两个字典? ”
A: 简单的比较一下变量,简单的看一下有没有区别,比如
- debug:
msg: The dictionaries are identical
when: source_list == target_list
要查找不同的值,请迭代字典的键列表并逐项比较字典,例如
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 }}"
给
msg: MyFlag1 is KO
msg: MyFlag2 is OK
msg: myFlag3 is OK
出于调试目的,可以先比较密钥,例如
- debug:
msg: "The difference in the keys: {{ diff_keys }}"
vars:
skeys: "{{ source_list.keys()|list }}"
tkeys: "{{ target_list.keys()|list }}"
diff_keys: "{{ skeys|symmetric_difference(tkeys) }}"
when: diff_keys|length != 0
问:“我怎样才能突出它们之间的区别? ”
A:创建一个仅包含不同项目的字典,例如
- set_fact:
diff_list: {}
- set_fact:
diff_list: "{{ diff_list|combine({item: source_list[item]}) }}"
loop: "{{ source_list.keys()|list }}"
when: source_list[item] != target_list[item]
给
diff_list:
MyFlag1: true
推荐阅读
- python - 在 tkinter 中成功登录后如何销毁 Class 窗口?
- c++ - 如何在编译时判断两个变量是否具有相同的类型?
- c++ - 如何在地图 C++ 中向矢量添加值
- javascript - 为什么我们要在反应中调用方法时添加它
- swiftui - 如何在 SwiftUI 中使用 Core NFC?
- angular - 如何使用 Angular 8 中的输入/输出将值从一个组件转移到另一个组件
- angular - 尽管已在后端成功执行,但 Post Request 在 Angular 中返回可观察到的错误,但邮递员返回正确的响应
- c++ - 在 Visual Studio for C++ 上组合/集成 2 个解决方案
- debugging - Sublime Text 3 Theme:一些侧边栏图标未呈现
- sql - 带有附加列的 Postgres 数据透视表