我有两个列表,两者都包含相同数量的字典。每个字典都有一个唯一的键。第二列表中的第一列表的每个字典都存在匹配,即在另一列表中存在具有唯一键的字典。但是这两个词典的其他元素可以变化。例如:
list_1 = [
{
'unique_id': '001',
'key1': 'AAA',
'key2': 'BBB',
'key3': 'EEE'
},
{
'unique_id': '002',
'key1': 'AAA',
'key2': 'CCC',
'key3': 'FFF'
}
]
list_2 = [
{
'unique_id': '001',
'key1': 'AAA',
'key2': 'DDD',
'key3': 'EEE'
},
{
'unique_id': '002',
'key1': 'AAA',
'key2': 'CCC',
'key3': 'FFF'
}
]
我想比较2个匹配字典的所有元素。如果任何元素不相等,我想打印不相等的元素。
你能帮帮忙吗?
7条答案
按热度按时间ryhaxcpt1#
假设字典像你的示例输入一样排成一行,你可以使用
zip()
函数来获得一个关联字典对的列表,然后你可以使用any()
来检查是否有差异:或者得到不同的对:
你甚至可以得到每对不匹配的密钥:
可能与相关值一起:
**注意:**如果您的输入列表尚未排序,您也可以轻松完成:
xytpbqjk2#
最快和最全面的方法是,使用两个
sets
的tuples
:(if您的列表已经是
sorted
,只需删除列表排序以保存性能)使用
intersection
查找重叠:使用
symmetric_difference
查找差异将
tuple
转换回dict
q35jwt9p3#
以下代码比较字典并打印不相等的项:
输出:
key2 BBB DDD
。通过使用zip
,我们可以一次遍历两个字典。然后,我们遍历第一个字典的条目,并将该值与第二个字典中的相应值进行比较。如果这两个值不相等,那么我们将打印键和这两个值。wnavrhmk4#
我有一个实际上不依赖于特定键的版本,所以元素是相等的(零)或不相等的(非零):
给出:
5cg8jx4n5#
arknldoa6#
在此方法的一侧传递旧列表和新列表
vbopmzt17#
根据键值比较两个字典列表,并从另一个字典列表中得到不同的字典项::-------