我有2个列表,两个列表包含相同数量的字典。每个字典都有一个唯一的键。第二个列表中的第一个列表的每个字典都有一个匹配项,也就是说另一个列表中存在一个具有唯一键的字典。但是,这两个词典的其他元素可能会有所不同。例如:
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个匹配字典的所有元素。如果任何元素不相等,我要打印不相等的元素。
你能帮忙吗?
假设字典像您的示例输入中那样排列,您可以使用该zip()
函数获取相关的成对字典的列表,然后可以使用它any()
来检查是否存在差异:
>>> 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'}]
>>> pairs = zip(list_1, list_2)
>>> any(x != y for x, y in pairs)
True
或获得不同的对:
>>> [(x, y) for x, y in pairs if x != y]
[({'key3': 'EEE', 'key2': 'BBB', 'key1': 'AAA', 'unique_id': '001'}, {'key3': 'EEE', 'key2': 'DDD', 'key1': 'AAA', 'unique_id': '001'})]
您甚至可以获得每对都不匹配的密钥:
>>> [[k for k in x if x[k] != y[k]] for x, y in pairs if x != y]
[['key2']]
可能连同相关值:
>>> [[(k, x[k], y[k]) for k in x if x[k] != y[k]] for x, y in pairs if x != y]
[[('key2', 'BBB', 'DDD')]]
注意:如果您尚未对输入列表进行排序,则也可以轻松地做到这一点:
>>> from operator import itemgetter
>>> list_1, list_2 = [sorted(l, key=itemgetter('unique_id'))
for l in (list_1, list_2)]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句