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

如何在Python字典内检索?基于关键词查找菜谱字典的实现问询

嘿,这就来帮你解决这两个问题!先从Python字典的基础检索讲起,再一步步实现你的菜谱关键词搜索需求。

一、Python字典的基础检索方法

Python字典是键值对结构,检索数据主要有这几种常用方式:

  • 直接通过键访问:如果你确定键存在,直接用字典名[键]就能拿到对应的值,比如my_dict['name']。但要注意,如果键不存在会抛出KeyError,所以更稳妥的方式是用get()方法,还能设置默认值:my_dict.get('name', '未找到该键'),这样键不存在时就返回你设置的默认值,不会报错。
  • 检查键是否存在:用in关键字先判断,比如if 'price' in my_dict:,确认存在后再检索,能避免不必要的错误。
  • 批量遍历检索:如果要遍历所有键、值或者键值对,可以用:
    • my_dict.keys():获取所有键的列表
    • my_dict.values():获取所有值的列表
    • my_dict.items():获取所有键值对的元组列表,比如for key, value in my_dict.items():就能逐个处理每个键值对。
二、菜谱字典的关键词搜索实现

先假设你的菜谱字典结构大概是这样的(可以根据实际情况调整):

recipes = {
    "番茄炒蛋": {
        "keywords": ["番茄", "鸡蛋", "家常菜", "快手"],
        "time": 15,  # 单位:分钟
        "ingredients": ["番茄", "鸡蛋", "盐", "糖"]
    },
    "红烧肉": {
        "keywords": ["猪肉", "红烧", "硬菜", "下饭"],
        "time": 40,
        "ingredients": ["五花肉", "生抽", "老抽", "冰糖"]
    },
    "凉拌黄瓜": {
        "keywords": ["黄瓜", "凉拌", "素菜", "开胃"],
        "time": 5,
        "ingredients": ["黄瓜", "蒜末", "醋", "生抽"]
    }
}

接下来我们实现根据关键词搜索,返回菜谱名称和时间的功能,分几种常见场景:

1. 单个关键词搜索

比如输入“快手”,找到所有包含这个关键词的菜谱:

def search_single_keyword(recipe_dict, keyword):
    matched_recipes = []
    for recipe_name, details in recipe_dict.items():
        # 检查当前菜谱的关键词列表是否包含搜索词
        if keyword in details["keywords"]:
            matched_recipes.append({
                "菜谱名称": recipe_name,
                "所需时间": f"{details['time']}分钟"
            })
    return matched_recipes

# 调用示例
print(search_single_keyword(recipes, "快手"))
# 输出: [{'菜谱名称': '番茄炒蛋', '所需时间': '15分钟'}]

2. 多个关键词任意匹配

输入多个关键词,只要菜谱包含其中任意一个就返回:

def search_any_keyword(recipe_dict, keywords):
    matched_recipes = []
    # 把搜索关键词转成集合,方便快速判断交集
    search_set = set(keywords)
    for recipe_name, details in recipe_dict.items():
        recipe_keywords = set(details["keywords"])
        # 求两个集合的交集,如果非空说明有匹配
        if search_set & recipe_keywords:
            matched_recipes.append({
                "菜谱名称": recipe_name,
                "所需时间": f"{details['time']}分钟"
            })
    return matched_recipes

# 调用示例:搜索包含"家常菜"或"素菜"的菜谱
print(search_any_keyword(recipes, ["家常菜", "素菜"]))
# 输出: [{'菜谱名称': '番茄炒蛋', '所需时间': '15分钟'}, {'菜谱名称': '凉拌黄瓜', '所需时间': '5分钟'}]

3. 多个关键词全部匹配

输入多个关键词,必须菜谱包含所有关键词才返回:

def search_all_keywords(recipe_dict, keywords):
    matched_recipes = []
    search_set = set(keywords)
    for recipe_name, details in recipe_dict.items():
        recipe_keywords = set(details["keywords"])
        # 判断搜索关键词是否是菜谱关键词的子集
        if search_set.issubset(recipe_keywords):
            matched_recipes.append({
                "菜谱名称": recipe_name,
                "所需时间": f"{details['time']}分钟"
            })
    return matched_recipes

# 先加一个包含多个重叠关键词的菜谱
recipes["番茄鸡蛋面"] = {
    "keywords": ["番茄", "鸡蛋", "面食", "快手"],
    "time": 10,
    "ingredients": ["番茄", "鸡蛋", "面条", "盐"]
}

# 调用示例:搜索同时包含"番茄"和"鸡蛋"的菜谱
print(search_all_keywords(recipes, ["番茄", "鸡蛋"]))
# 输出: [{'菜谱名称': '番茄炒蛋', '所需时间': '15分钟'}, {'菜谱名称': '番茄鸡蛋面', '所需时间': '10分钟'}]

额外优化建议

  • 不区分大小写:如果要支持大小写不敏感搜索,可以把所有关键词转成小写(或大写)再匹配,比如:
    if keyword.lower() in [k.lower() for k in details["keywords"]]
    
  • 模糊匹配:如果想支持部分字符匹配(比如输入“茄”也能找到番茄相关菜谱),可以改成字符串包含判断:
    if any(keyword in k for k in details["keywords"])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:08:31