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

Python多嵌套字典中键存在性检测的代码问题排查

问题分析与修复

你的代码有几个关键问题导致结果不符合预期,咱们逐一拆解:

1. 返回值类型错误

你期望函数返回True/False,但原代码找到匹配键时返回的是对应的值(比如找"oui"时返回空字符串'',找"jih"时返回"je sais pas "),这显然不是你要的布尔结果。

2. 递归逻辑错误

在处理子字典时,你写了for result in find_key(key, v): return result——但find_key是一个返回单个值的函数,不是可迭代对象,这行代码会直接抛出TypeError(除非递归返回的是可迭代类型,但这里显然不是)。而且就算不报错,这种写法也只会检查第一个子字典,一旦当前子字典没找到键,就不会继续检查其他子项了。

3. 缺少默认返回值

当遍历完所有键和子字典都没找到目标键时,函数没有明确返回False,会默认返回None,这也不符合你的期望。


修复后的代码

下面是修正后的版本,完全符合你的需求:

def find_key(key, dicto):
    for k, v in dicto.items():
        if k == key:
            return True  # 找到键直接返回True
        elif isinstance(v, dict):
            # 递归检查子字典,如果子字典找到键,就返回True
            if find_key(key, v):
                return True
    # 遍历完所有项都没找到,返回False
    return False

测试你的示例

用你提供的data字典测试:

data = {
    "spam": {
        "egg": {
            "erwan": "Well..",
            "a": "ezeaea",
            "sausages": "Spam egg sausages and spam",
            "jih": "je sais pas "
        },
        "oui": ''
    }
}

print(find_key("oui", data))  # 输出 True
print(find_key("jih", data))  # 输出 True
print(find_key("oezea", data))  # 输出 False

结果完全符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:36:27