Python爬取食谱生成购物清单:按单位合并食材数量的实现求助
解决方案
我们可以通过**「食材名称 + 单位」作为唯一标识**来分组统计数量,实现单位相同的食材合并、单位不同的食材分开展示的需求,具体步骤如下:
- 将所有食材整理成结构化数据(比如包含数量、单位、食材名的元组)
- 用字典累计相同标识的食材数量
- 最后将字典数据转换成目标输出格式
代码实现
# 模拟爬取到的所有食材,格式为(数量, 单位, 食材名称) 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
相关产品推荐
相关产品推荐

