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

How to compare two lists of dictionaries by the same key?

我必须列出字典:

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'}]