Python比对字典值与列表元素返回所有匹配键的代码问题求解
代码问题排查与修正
原代码错误点
- 逻辑顺序错误:错误优先遍历用户饮食限制,而非先遍历餐厅校验全量限制,且首次匹配到单个限制的餐厅就直接返回,未完成全量餐厅和全量限制的校验
- 排序和return位置错误:在首次匹配到符合单个限制的餐厅时就执行排序和返回,没有收集所有符合条件的结果
- 匹配逻辑不符合要求:要求餐厅满足全部用户限制,原代码只要满足任意一个限制就会被加入结果
修正后代码
def no_you_pick(my_dict, my_list): output = [] # 遍历所有餐厅 for restaurant, tags in my_dict.items(): # 标记当前餐厅是否满足所有限制 is_valid = True for limit in my_list: if limit not in tags: is_valid = False break if is_valid: output.append(restaurant) # 全部校验完成后统一排序 output.sort() # 判断返回结果 if not output: return "Sorry, no restaurants meet your restrictions" return output grading_scale={'Moes, Larrys, Curlys': ['vegetarian', 'vegan', 'gluten-free'], 'Hot Chili Pepper': ['vegetarian', 'gluten-free', 'vegan']} guests_diet = ["vegetarian", "vegan", "gluten-free"] print(no_you_pick(grading_scale, guests_diet))
运行结果
输出为预期的 ["Hot Chili Pepper", "Moes, Larrys, Curlys"],符合要求:未使用列表推导式,无匹配场景下直接返回提示字符串,不会被包裹在列表中。
内容的提问来源于stack exchange,提问作者PlumChy
相关产品推荐
相关产品推荐

