您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

假设字典像您的示例输入中那样排列,您可以使用该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)]
python 2022/1/1 18:42:34 有275人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶