
高效处理Python深层嵌套字典
本文探讨高效访问和操作Python深度嵌套字典的方法,尤其针对处理JSON数据或类似结构数据场景,避免冗余代码。我们将改进和扩展基于属性树访问和路径支持的方案。
方法一:属性树访问
通过属性访问(例如my_obj.a.b.c)访问嵌套字典值。 Python的__getattr__方法无法直接判断属性路径是否存在,访问不存在路径会引发AttributeError。 为解决此问题,需自定义类,在访问不存在路径时返回None或抛出KeyError。
立即学习“Python免费学习笔记(深入)”;
直接利用dict和__getattr__、__setattr__方法更直接。 无需将__getitem__设置为dict.__getitem__的别名。 更稳健的方法是修改__getitem__方法,在访问不存在键时创建新的dotdictify对象,动态构建属性树:
def __getitem__(self, key): if key not in self: dict.__setitem__(self, key, dotdictify()) return dict.__getitem__(self, key)
方法二:路径支持
使用点分隔符表示法(例如'a.b.c')访问和设置嵌套字典值,需要修改dotdictify类以解析点分隔符表示法,递归访问和修改字典值。 改进后的dotdictify类如下:
class dotdictify(dict): # ... (省略部分代码,与原文答案相同) ...
此改进后的dotdictify类重写了__setitem__、__getitem__、__contains__和setdefault方法,支持点分隔符表示法。 它在设置值时自动创建不存在的嵌套字典,并正确处理get()和setdefault()方法。 测试代码验证了其功能的完整性。
以上就是如何便捷地访问和操作Python深层嵌套字典?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1358387.html
微信扫一扫
支付宝扫一扫