如何用同一个关键字比较两个字典列表



我必须列出字典:

basket = [{"size": "big", "food": "cheese"}, {"size": "small", "food": "cherries"}]
fruits = [{"size": "small", "food": "blueberries"}, {"size": "small", "food": "cherries"}]

我需要通过";食物;钥匙如果一个水果不在篮子列表中,我想把整个字典附加到篮子列表中。

我试着用filter((来做这件事,但我无法想象这样一个场景,即我可以调用basket[food]并同时迭代水果列表。

您可以创建包含篮子中所有食物的临时set,然后通过不在此集合中的食物扩展basket列表:

basket = [
{"size": "big", "food": "cheese"},
{"size": "small", "food": "cherries"},
]
fruits = [
{"size": "small", "food": "blueberries"},
{"size": "small", "food": "cherries"},
]
in_basket = set(f["food"] for f in basket)
basket.extend(f for f in fruits if f["food"] not in in_basket)
print(basket)

打印:

[
{"size": "big", "food": "cheese"},
{"size": "small", "food": "cherries"},
{"size": "small", "food": "blueberries"},
]

你可以使用zip方法浏览这两个列表,检查篮子列表中是否有水果列表的一个键,如果有,你可以浏览水果列表并创建一个条件来检查这个食物是否已经在列表中,如果没有,你是否添加

basket = [{"size": "big", "food": "cheese"}, {"size": "small", "food": "cherries"}]
fruits = [{"size": "small", "food": "blueberries"}, {"size": "small", "food": "cherries"}]
for bask, fruit in zip(basket, fruits):
if bask['food'] == fruit['food']:
for fruit in fruits: 
if bask['food'] != fruit['food']:
basket.append(fruit)
print(basket)

输出:

[{'size': 'big', 'food': 'cheese'}, {'size': 'small', 'food': 'cherries'}, {'size': 'small', 'food': 'blueberries'}]