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

如何以Pythonic方式简化嵌套字典的重复长路径访问?

问题描述

我定义了两个Python字典:

d1 = {"parent1": {"get": {"responses": {200: {"content": {"application/json": {}}}}}}}
d2 = {"parent2": {"get": {"responses": {200: {"content": {"application/json": {}}}}}}}

为避免代码重复,我提取了公共结构复用:

common = {"get": {"responses": {200: {"content": {"application/json": {}}}}}}
d1 = {"parent1": common}
d2 = {"parent2": common}

但访问深层嵌套值时,每次都要写冗长的键路径:

v1 = d1["parent1"]["get"]["responses"][200]["content"]["application/json"]
v2 = d2["parent2"]["get"]["responses"][200]["content"]["application/json"]

想找符合Pythonic风格的方法,消除这种重复的长键路径。

解决方案

1. 封装通用取值函数

把深层取值逻辑打包成函数,用reduce遍历键路径,一次性搞定:

from functools import reduce
import operator

def get_nested(data, keys):
    return reduce(operator.getitem, keys, data)

# 把重复的键路径存成元组
nested_keys = ("get", "responses", 200, "content", "application/json")

# 调用函数取值
v1 = get_nested(d1["parent1"], nested_keys)
v2 = get_nested(d2["parent2"], nested_keys)

如果连顶层的parent1/parent2也想统一处理,直接把它们加到键路径里:

def get_value(data, parent_key):
    full_keys = (parent_key, "get", "responses", 200, "content", "application/json")
    return reduce(operator.getitem, full_keys, data)

v1 = get_value(d1, "parent1")
v2 = get_value(d2, "parent2")

2. 转成可属性访问的对象

用标准库的SimpleNamespace把字典转成可以用.访问的对象,减少下标符号:

from types import SimpleNamespace

def dict_to_obj(d):
    if isinstance(d, dict):
        return SimpleNamespace(**{k: dict_to_obj(v) for k, v in d.items()})
    return d

# 转换字典
obj_d1 = dict_to_obj(d1)
obj_d2 = dict_to_obj(d2)

# 访问值(注意带/的键还是要用下标)
v1 = obj_d1.parent1.get.responses[200].content["application/json"]
v2 = obj_d2.parent2.get.responses[200].content["application/json"]

3. 预定义键路径循环取值

如果不想引入额外函数,直接存键路径元组,用循环遍历:

path = ("get", "responses", 200, "content", "application/json")

v1 = d1["parent1"]
for key in path:
    v1 = v1[key]

v2 = d2["parent2"]
for key in path:
    v2 = v2[key]

这种方式可读性强,不需要依赖额外库,适合简单场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:57:51