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

Python中无需自定义函数获取嵌套字典指定key值的简便方法

如何在任意嵌套深度的字典中直接获取指定键的值?

先看几个具有不同嵌套结构的示例字典:

dict1 = { 'level1': "value",
         'unexpectable': { 'maybe': { 'onemotime': {'name': 'John'} } } }

dict2 = { 'level1': "value", 'name': 'Steve'} 

dict3 = { 'find': { 'what': { 'you': { 'want': { 'in': { 'this': { 'maze': { 'I': { 'made': { 'for': { 'you': { 'which': { 'is in': { 'fact that': { 'was just': { 'bully your': { 'searching': { 'for': { 'the name': { 'even tho': { 'in fact': { 'actually': { 'there': { 'is': { 'in reality': { 'only': { 'one': { 'key': { 'named': { 'name': 'Michael' } } } } } } } } } } } } } } } } } } } } } } } } } } } }

传统获取嵌套字典中name值的方法需要逐层指定键,比如:

print(dict1['unexpectable']['maybe']['onemotime']['name'])

如果尝试用get()链式调用(比如dict1.get('unexpectable').get('maybe')...),一旦中间某个键不存在就会触发报错。

内置方法说明

Python没有内置类似dict1.lastlevel('name')这样的方法,能直接适配任意嵌套结构获取指定键的值。

无需自定义函数的临时写法

如果完全不想定义单独函数,可以用一行递归生成器表达式实现查找(但可读性极差,仅适合临时场景):

# 以查找dict1的name值为例
next((val for k, val in dict1.items() if k == 'name') or (val for v in dict1.values() if isinstance(v, dict) for val in (next((x for x in [v] for x in (next((val for k, val in x.items() if k == 'name') or (val for vv in x.values() if isinstance(vv, dict) for val in (next((xx for xx in [vv] for xx in (next((val for k, val in xx.items() if k == 'name') or (val for vvv in xx.values() if isinstance(vvv, dict) for val in (next((xxx for xxx in [vvv] for xxx in (next((val for k, val in xxx.items() if k == 'name'), None))), None))), None))), None))), None))

更实用的方案(允许自定义函数)

如果可以接受自定义函数,下面的递归函数简洁易读,能适配任意嵌套深度的字典:

def get_nested_key(d, target_key):
    if target_key in d:
        return d[target_key]
    for value in d.values():
        if isinstance(value, dict):
            result = get_nested_key(value, target_key)
            if result is not None:
                return result
    return None

# 调用示例
print(get_nested_key(dict1, 'name'))  # 输出 John
print(get_nested_key(dict2, 'name'))  # 输出 Steve
print(get_nested_key(dict3, 'name'))  # 输出 Michael

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:40:57