Python新手求助:如何关联两个独立字典实现过敏食物查询?
问题解决:关联参与者过敏原与需规避食物的字典处理
你的需求是输入参与者姓名后,输出其过敏原及需避开的食物,原代码存在几个明显问题,下面是修正后的完整代码和说明:
原代码的问题
- 变量名拼写不一致:定义的字典是
participants_and_allergens,但代码里写成了participants_og_allergener(挪威语og对应英文and,但代码里要统一命名) - 变量未定义就引用:在赋值
allergens = ...之前就打印allergens,会触发报错 - 食物匹配逻辑错误:
allergens_and_foods.get("allergens")完全不对,这个字典的键是食物名,需要遍历所有食物,检查是否包含参与者的过敏原
修正后的代码
participants_and_allergens = { "Ole": ["gluten", "egg"], "Silje": ["shellfish", "nuts"], "Ragnar": ["milk", "fish"] } allergens_and_foods = { "Garlic bread": ["gluten", "egg"], "Fish soup": ["shellfish", "fish"], "Chocolate Cake": ["milk", "egg"] } def check_allergies(): name = input("What is your name?\n> ") # 检查姓名是否在注册表中 allergens = participants_and_allergens.get(name) if not allergens: print(f"Sorry, {name} does not exist in the registry") return # 收集需要避开的食物:遍历所有食物,只要食物含任一过敏原就加入列表 forbidden_foods = [] for food, food_allergens in allergens_and_foods.items(): # 检查当前食物的过敏原是否和参与者的过敏原有交集 if any(allergen in food_allergens for allergen in allergens): forbidden_foods.append(food) # 格式化字符串,把列表转成自然语言(比如用and连接最后一项) allergens_str = ' and '.join(allergens) # 处理egg变eggs的小细节,符合示例输出 allergens_str = allergens_str.replace("egg", "eggs") foods_str = ' and '.join(forbidden_foods) # 输出最终结果 print(f"Hi {name}, you have allergies to {allergens_str} and should stay away from the foods {foods_str}") check_allergies()
代码逻辑说明
- 先通过
participants_and_allergens.get(name)获取参与者的过敏原列表,不存在则直接提示 - 遍历食物字典的每一项(食物名+对应过敏原),用
any()函数判断该食物是否包含参与者的任一过敏原,是的话加入禁吃食物列表 - 用
' and '.join()把列表转成符合口语习惯的字符串,比如["gluten", "egg"]变成"gluten and egg" - 最后用f-string拼接成完整的输出句子,和你想要的示例格式一致
内容的提问来源于stack exchange,提问作者ali03
相关产品推荐
相关产品推荐

