高效处理Python深层嵌套字典
本文探讨高效访问和操作Python深度嵌套字典的方法,尤其针对处理JSON数据或类似结构数据场景,避免冗余代码。我们将改进和扩展基于属性树访问和路径支持的方案。
方法一:属性树访问
通过属性访问(例如
)访问嵌套字典值。 Python的
方法无法直接判断属性路径是否存在,访问不存在路径会引发
。 为解决此问题,需自定义类,在访问不存在路径时返回
或抛出
。
立即学习
“
Python免费学习笔记(深入)
”;
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
直接利用
和
、
方法更直接。 无需将
设置为
的别名。 更稳健的方法是修改
方法,在访问不存在键时创建新的
对象,动态构建属性树:
方法二:路径支持
使用点分隔符表示法(例如
)访问和设置嵌套字典值,需要修改
类以解析点分隔符表示法,递归访问和修改字典值。 改进后的
类如下:
此改进后的
类重写了
、
、
和
方法,支持点分隔符表示法。 它在设置值时自动创建不存在的嵌套字典,并正确处理
和
方法。 测试代码验证了其功能的完整性。
my_obj.a.b.c__getattr__AttributeErrorNoneKeyErrordict__getattr____setattr____getitem__dict.__getitem____getitem__dotdictifydef __getitem__(self, key):
if key not in self:
dict.__setitem__(self, key, dotdictify())
return dict.__getitem__(self, key)'a.b.c'dotdictifydotdictifyclass dotdictify(dict):
# ... (省略部分代码,与原文答案相同) ...dotdictify__setitem____getitem____contains__setdefaultget()setdefault()