设备统计函数异常求助:需正确实现大/小型设备计数功能
问题分析与修复
核心问题
你的代码存在两个关键错误,直接导致统计异常:
- return语句缩进错误:把
return x,y放在了for循环内部,函数遍历到第一个设备就直接返回,根本没完成整个recipe['equipment']列表的统计。 - 返回结构冗余:返回两个独立字典的元组,后续批量处理时会得到元组列表,不利于数据整合。
另外还有个小问题:生成small_equipment的注释写错了,应该标注为生成小型设备列表,不是大型。
修正后的代码
# 定义大型设备关键词 big_equip = ['pot', 'skillet', 'sheet pan'] # 从完整设备列表中筛选大型设备 big_equipment = [bigE for bigE in equipment_list if any(xs in bigE for xs in big_equip)] # 定义小型设备关键词 sml_equip = ['Whisk', 'Wooden spoon', 'Tongs', 'Spatula', 'bowl'] # 从完整设备列表中筛选小型设备(修正注释错误) small_equipment = [smallE for smallE in equipment_list if any(xs in smallE for xs in sml_equip)] def count_equipment(recipe): # 合并统计字典,结构更简洁 equipment_count = {'big equipment': 0, 'small equipment': 0} for z in recipe['equipment']: if z in big_equipment: equipment_count['big equipment'] += 1 elif z in small_equipment: # 用elif避免同一设备被重复统计(防止未来关键词重叠) equipment_count['small equipment'] += 1 # 将return移到循环外部,确保遍历完所有设备再返回结果 return equipment_count # 现在得到的是字典列表,每个字典对应一个食谱的设备统计结果 equipment_columns = [count_equipment(_) for _ in safe_result]
额外优化说明
- 合并两个统计字典为一个,后续处理数据时无需拆分元组,更便捷。
- 把第二个
if改为elif,避免未来出现关键词重叠时,同一设备被重复计数。 - 修正注释错误,提升代码可读性。
内容的提问来源于stack exchange,提问作者Julie
相关产品推荐
相关产品推荐

