gpt4 book ai didi

python - 如何比较多个键值对的两个字典列表?

转载 作者:太空狗 更新时间:2023-10-30 02:25:37 26 4
gpt4 key购买 nike

我有两个 listdict,一个是另一个的修改子集。我想根据两个键获取 list_one 中没有出现在 list_two 中的元素。示例:

list_one = [{'name': 'alf', 'age': 25},
{'name': 'alf', 'age': 50},
{'name': 'cid', 'age': 30}]
list_two = [{'name': 'alf', 'age': 25, 'hair_color': 'brown'},
{'name': 'cid', 'age': 30, 'hair_color': 'black'}]
desired_list = [{'name': 'alf', 'age': 50}]

我怎样才能做到这一点?我有一种感觉,它与某种 list comprehension 相关,例如:

desired_list = [x for x in list_one if x['name'] != x2['name'] and x['age'] != x2['age'] 
for all x2 in list_two]

最佳答案

我认为这很容易通过两个理解来完成:

代码:

have_2 = {(d['name'], d['age']) for d in list_two}
extra = [d for d in list_one if (d['name'], d['age']) not in have_2]

这首先创建了我们已经拥有的 tupleset,然后检查哪些 dict 与这些现有键中的任何一个不匹配.

测试代码:

list_one = [{'name': 'alf', 'age': 25},
{'name': 'alf', 'age': 50},
{'name': 'cid', 'age': 30}]
list_two = [{'name': 'alf', 'age': 25, 'hair_color': 'brown'},
{'name': 'cid', 'age': 30, 'hair_color': 'black'}]

have_2 = {(d['name'], d['age']) for d in list_two}
extra = [d for d in list_one if (d['name'], d['age']) not in have_2]

print(extra)

结果:

[{'name': 'alf', 'age': 50}]

关于python - 如何比较多个键值对的两个字典列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48535599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com