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

如何编写函数从非对称嵌套且键唯一的字典中取值?

解决嵌套字典按键取值的问题

针对你提出的非对称嵌套字典(无重复键)取值需求,这里提供一个基于递归遍历的实现方案,无需依赖任何外部模块:

函数实现

def get_some_val(d, key):
    # 检查当前字典是否包含目标键
    if key in d:
        return d[key]
    # 递归遍历所有嵌套字典
    for val in d.values():
        if isinstance(val, dict):
            found = get_some_val(val, key)
            if found is not None:
                return found
    # 未找到目标键时返回None,也可根据需求改为抛出KeyError
    return None

逻辑说明

  1. 当前层级检查:首先判断目标键是否存在于当前层级的字典中,存在则直接返回对应值
  2. 递归遍历嵌套:遍历当前字典的所有值,若值为字典类型,则递归调用函数继续查找
  3. 结果返回:递归过程中一旦找到目标键对应的值,立即返回;遍历完所有层级仍未找到则返回None

测试示例

使用你提供的字典进行测试:

d = {
    'd1': {'d11': 'a', 'd12': 'b'},
    'd2': {'d21': 'c', 'd22': {'d221': 'd', 'd222': 'e'}}
}

print(get_some_val(d, 'd221'))  # 输出:d
print(get_some_val(d, 'd12'))   # 输出:b
print(get_some_val(d, 'd2'))    # 输出:{'d21': 'c', 'd22': {'d221': 'd', 'd222': 'e'}}
print(get_some_val(d, 'test'))  # 输出:None

关于exec方案的说明

不建议使用exec来实现该需求,原因如下:

  • 安全风险:exec会执行传入的字符串代码,若目标键包含恶意构造的内容,可能导致安全问题
  • 维护性差:通过字符串拼接生成代码的方式,逻辑不直观,后期调试和修改难度大

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:10:30