比较2个由字典和python中唯一键组成的列表

alwbtc:

我有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个匹配字典的所有元素。如果任何元素不相等,我要打印不相等的元素。

你能帮忙吗?

尼古拉斯·B:

假设字典像您的示例输入中那样排列,您可以使用该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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python3如何通过唯一键连接两个字典列表

创建一个由子数组和子列表项组成的字典

原则和复合唯一键

唯一键和替换语句

在表中插入一个唯一键,几列和子查询的总和

如何更新嵌套字典中唯一键的值?

基于唯一键简化字典列表的方法

比较python中的2个字典并使用字典中的值创建一个列表

根据Python中的唯一键和条件创建新数组

使用唯一键和所有相关值将列表列表转换为字典

将具有唯一键的字典添加到没有唯一键的DataFrame中

如何用唯一键和值作为列表的字典制作数据框?

从两列中创建一个具有唯一键和值列表的字典

如何在python中以唯一键和多个值将输出作为字典返回?

从由多个列表组成的字典中,从每个列表中选择一个元素

2个字典列表之间的python差异由一个键

在SQLITE中插入后,使用触发器创建组成的唯一键字段

使用元组的唯一键和各种列表值创建字典

表示Python中的非唯一键/值对

比较两个没有唯一键的表

Python在键中过滤字典的唯一值并创建另一个过滤的字典

使用由两个值组成的键在 Python 中合并两个字典

使用公式比较基于唯一键的两个excel表

如何在列表中的字典中打印所有唯一键?

如何在字典中编写一个唯一的字典,列表作为 csv 文件的键?

如何基于一键python合并字典列表

字典唯一键重命名和替换

Python 从字符串中查找和替换唯一键语法

Python - 如何计算包含字典字典的列中每个唯一键的频率?