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

Python爬取食谱生成购物清单:按单位合并食材数量的实现求助

解决方案

我们可以通过**「食材名称 + 单位」作为唯一标识**来分组统计数量,实现单位相同的食材合并、单位不同的食材分开展示的需求,具体步骤如下:

  1. 将所有食材整理成结构化数据(比如包含数量、单位、食材名的元组)
  2. 用字典累计相同标识的食材数量
  3. 最后将字典数据转换成目标输出格式

代码实现

# 模拟爬取到的所有食材,格式为(数量, 单位, 食材名称)
all_ingredients = [
    (500, "grams", "番茄"),
    (1, "dl", "橄榄油"),
    (2, "根", "黄瓜"),
    (2, "个", "牛油果"),
    (200, "grams", "番茄"),
    (1, "dl", "橄榄油"),
    (100, "grams", "黄瓜")
]

# 初始化字典用于合并相同(食材名, 单位)的数量
merged_ingredients = {}
for qty, unit, name in all_ingredients:
    # 用(食材名, 单位)作为唯一键,确保只有完全匹配才合并
    key = (name, unit)
    if key in merged_ingredients:
        merged_ingredients[key] += qty
    else:
        merged_ingredients[key] = qty

# 输出最终购物清单
print("合并后的购物清单:")
for (name, unit), total_qty in merged_ingredients.items():
    print(f"- {total_qty} {unit} 的 {name}")

运行结果

合并后的购物清单:
- 700 grams 的 番茄
- 2 dl 的 橄榄油
- 2 根 的 黄瓜
- 2 个 的 牛油果
- 100 grams 的 黄瓜

扩展处理(针对爬取的字符串格式)

如果爬取到的食材是原始字符串(比如"500 grams 的番茄"),可以用字符串分割提取关键信息:

def parse_ingredient(s):
    # 分割字符串,适配「数量 单位 的 食材名」格式
    basic_info, name = s.split(" 的 ")
    qty_part = basic_info.split()
    qty = int(qty_part[0])
    unit = " ".join(qty_part[1:])  # 兼容多词单位(比如"tablespoon of")
    return (qty, unit, name)

# 示例使用
raw_str = "500 grams 的番茄"
qty, unit, name = parse_ingredient(raw_str)

将爬取到的所有字符串食材用这个函数转换后,再代入前面的合并逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 21:23:10