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

Python如何匹配字典内嵌列表值获取对应键 实现随机选餐厅

餐厅随机筛选函数修正方案

现有代码存在以下逻辑错误,无法实现预期筛选效果:

  • 遍历字典时仅获取了属性值,没有同步拿到对应的餐厅名称,匹配后加入列表的是属性值而非餐厅名
  • 随机返回的逻辑写在了循环内部,第一次循环就会终止执行,无法遍历完所有餐厅数据
  • 候选列表定义在全局作用域,多次调用函数会残留历史匹配结果,导致返回错误
  • 使用list、type作为变量名,会覆盖Python内置的类型和方法,容易引发异常
  • 全随机分支没有实现对应逻辑,也没有处理无匹配结果的异常场景

修正后完整代码

import random

Restaurants = {
    "Eureka": ["American", "$$", "Lunch", "Dinner"],
    "Le_Pain": ["Bakery", "$$", "Breakfast", "Lunch", "Dinner"],
    "Creme_Bakery": ["Bakery", "$", "Snack"]
}

def simple_chooser():
    print('请选择筛选模式:randomize(完全随机)、type(按菜系类型)、price(按价格)、meal(按用餐时段)')
    mode = input().strip()
    # 完全随机模式
    if mode == "randomize":
        return random.choice(list(Restaurants.keys()))
    # 按菜系类型筛选
    elif mode == "type":
        print("可选类型:American, Bakery, Pie, Ice_Cream, Bagels, Asian, Chocolate, Italian, Pizza, Thai, Mexican, Japanese, Acai, Mediterranean, Boba/Coffee")
        selected_type = input().strip()
        candidates = []
        for rest_name, attrs in Restaurants.items():
            if selected_type in attrs:
                candidates.append(rest_name)
        if not candidates:
            return "未找到匹配该类型的餐厅"
        return random.choice(candidates)

# 函数调用测试
if __name__ == "__main__":
    selected = simple_chooser()
    print(f"筛选结果:{selected}")

核心逻辑说明

  • 遍历餐厅字典时使用items()方法,同时拿到餐厅名称和对应的属性列表,匹配筛选条件时将餐厅名加入候选列表
  • 候选列表定义在函数内部,每次调用函数都会重新初始化,不会残留历史数据
  • 所有遍历、筛选逻辑执行完成后,再从候选列表里随机选结果,不会提前终止循环
  • 增加了无匹配结果的兜底判断,避免对空列表执行随机选择时报错
  • 输入增加strip()处理,自动忽略用户输入的首尾空格,降低输入格式导致的匹配失败概率
  • 后续要加价格、用餐时段的筛选逻辑,和类型筛选的写法完全一致,只需要新增对应分支,判断用户输入的价格/时段是否在餐厅属性列表里即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:09:38