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

如何优雅提取JSON指定键?Python嵌套字典键路径提取问询

问题:通过键路径优雅访问嵌套字典的目标数据

假设我们有一个嵌套字典(或JSON),需要访问不同层级的特定键/子键,是否可通过指定键路径仅返回目标数据?

示例字典如下:

dct = {'A': {'A1': {'A11': 'something', 'A12': 'something else'}},
       'B': {'B1': 'old thing', 'B2': 'new thing'},
       'C': 'no level'} 

当前写法可行但不够优雅:

print(dct['A']['A1']['A12'])
print(dct['B']['B2'])
print(dct['C'])

理想状态下,希望能通过键路径列表返回所需的子集数据。

优雅实现方案

1. 自定义函数(直观易扩展)

写一个简单的函数逐层遍历键路径,还能按需添加异常处理:

def get_nested_value(data, keys, default=None):
    current = data
    try:
        for key in keys:
            current = current[key]
        return current
    except (KeyError, TypeError):
        return default

# 使用示例
print(get_nested_value(dct, ['A', 'A1', 'A12']))  # 输出: something else
print(get_nested_value(dct, ['B', 'B2']))         # 输出: new thing
print(get_nested_value(dct, ['C']))               # 输出: no level
# 处理不存在的键路径
print(get_nested_value(dct, ['A', 'A2'], default='not found'))  # 输出: not found

2. 用functools.reduce实现极简写法

借助Python内置的reduce函数,一行代码完成核心逻辑:

from functools import reduce

def get_nested_value(data, keys):
    return reduce(lambda d, k: d[k], keys, data)

# 使用示例
print(get_nested_value(dct, ['A', 'A1', 'A12']))  # 输出: something else

3. 支持字符串形式的键路径(可选)

如果习惯用点分隔的字符串(如"A.A1.A12"),可以先拆分路径再处理:

def get_nested_value(data, key_path, sep='.', default=None):
    keys = key_path.split(sep)
    current = data
    try:
        for key in keys:
            current = current[key]
        return current
    except (KeyError, TypeError):
        return default

# 使用示例
print(get_nested_value(dct, 'A.A1.A12'))  # 输出: something else

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:43:09