You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现合并两个字典列表中重复食材的数量

解决方案:合并相同食材的购物清单并导出Excel

针对你遇到的「相同食材(单位一致)重复显示」问题,提供两种解决方案:一种是利用Pandas的分组功能快速实现,另一种是纯Python循环逻辑(适合学习理解)。

方法一:用Pandas分组合并(高效简洁)

你已经在使用Pandas,直接用groupby按「食材名称+单位」分组,累加数量即可:

import pandas as pd

friedRiceShrimp = [
    {"Ingredient": "Garlic clove", "Size": "clove", "Quantity": 3, "Aisle": "Produce"},
    {"Ingredient": "Instant Brown Rice", "Size": "oz", "Quantity": 16, "Aisle": 22},
    {"Ingredient": "Soy Sauce", "Size": "tbsp", "Quantity": 2, "Aisle": 22},
    {"Ingredient": "Chili Paste", "Size": "tbsp", "Quantity": 2, "Aisle": 22},
    {"Ingredient": "Honey", "Size": "tbsp", "Quantity": 1, "Aisle": 18},
    {"Ingredient": "Peanut Oil", "Size": "tbsp", "Quantity": 2, "Aisle": 21},
    {"Ingredient": "Shrimp", "Size": "oz", "Quantity": 10, "Aisle": 12},
    {"Ingredient": "Egg", "Size": "individual", "Quantity": 3, "Aisle": "Dairy"},
    {"Ingredient": "Snap Peas", "Size": "cup", "Quantity": 1.5, "Aisle": "Produce"},
    {"Ingredient": "Peanuts Dry-Roasted", "Size": "cup", "Quantity": .3, "Aisle": 14}
]

macNCheese = [
    {"Ingredient": "Bacon", "Size": "Slice", "Quantity": 6, "Aisle": 8},
    {"Ingredient": "Chicken Stock", "Size": "cup", "Quantity": 2, "Aisle": 24},
    {"Ingredient": "Milk", "Size": "cup", "Quantity": 1, "Aisle": "Dairy"},
    {"Ingredient": "Butternut Squash puree", "Size": "oz", "Quantity": 10, "Aisle": "Produce"},
    {"Ingredient": "Macaroni Elbow Pasta", "Size": "oz", "Quantity": 10, "Aisle": 23},
    {"Ingredient": "Broccoli", "Size": "cup", "Quantity": 3, "Aisle": "Produce"},
    {"Ingredient": "Cheddar Cheese Shredded", "Size": "oz", "Quantity": 5, "Aisle": 8},
    {"Ingredient": "Garlic clove", "Size": "clove", "Quantity": 2, "Aisle": "Produce"}
]

# 合并所有食谱
shopping_list = friedRiceShrimp + macNCheese
df = pd.DataFrame(shopping_list)

# 按「食材名称+单位」分组,累加数量,其他列取第一个值(若同一食材不同食谱 aisle 不同,可改成"list"保留所有值)
merged_df = df.groupby(["Ingredient", "Size"], as_index=False).agg({
    "Quantity": "sum",
    "Aisle": "first"
})

# 导出到Excel
merged_df.to_excel("Shopping_List.xlsx", index=False)

方法二:纯Python循环实现(适合学习)

如果想手动实现逻辑,用字典跟踪已有的「食材+单位」组合,避免重复遍历列表:

friedRiceShrimp = [
    # 原食材数据不变
]

macNCheese = [
    # 原食材数据不变
]

shopping_list = friedRiceShrimp + macNCheese
final_dict = {}

for item in shopping_list:
    # 用「食材名称+单位」作为唯一标识键
    key = (item["Ingredient"], item["Size"])
    if key in final_dict:
        # 数量累加
        final_dict[key]["Quantity"] += item["Quantity"]
    else:
        # 复制条目存入字典,避免修改原列表数据
        final_dict[key] = item.copy()

# 转换为列表格式
final_list = list(final_dict.values())

# 导出到Excel
import pandas as pd
df = pd.DataFrame(final_list)
df.to_excel("Shopping_List.xlsx", index=False)

你原有代码的问题说明

  1. 初始final_list为空时,访问final_list[0]会直接报错
  2. 仅检查列表第一个元素,未遍历所有已添加的食材
  3. 未考虑「单位一致」的匹配条件,仅匹配了食材名称

内容的提问来源于stack exchange,提问作者Erik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:55:17