Retrieving values from nested python dicts with dot notation
本问题已经有最佳答案,请猛点这里访问。
我目前在我的一个项目中使用configobj来构建基于文本的配置文件,这非常简单。它返回的数据结构是一个普通的dict类型,在我的例子中,它可以包含许多其他dict作为值,它们本身可以包含dict等等。我正在寻找用类包装主dict的最方法,以便实现类似getattr的东西,用点符号递归地检索项。像这样:
1 2 3 4 5 6 7 8 9 | class MyDict(dict): def __init__(self, **kwargs): self.d = dict(kwargs) def __getattr__(self, key, default=None): try: return self.d[key] except AttributeError: print"no-oh!" return default |
不幸的是,这只适用于第一层。如果我调用的键的值也是一个二级dict,并且递归到内部层,我实际上希望它是递归的。
类似这样的电话:
1 2 3 4 | foo = MyDict(super_very_complex_nested_dict) x = foo.a1 y = foo.a2.b1 #a2 is a dict value z = foo.a2.b2.c1 #a2 and b2 are dict values |
这样做的明智方法是什么?
编辑:我的问题与建议的副本略有不同。我知道如何使用getattr进行普通听写。我想知道如何将它用于嵌套式听写。我不认为这是一个幼稚的问题。
好吧,我在建议的线程中添加了更多,实际上我找到了一个很好的解决方案,那就是使用这个包:
https://pypi.python.org/pypi/attrdict
这正是我想要的,递归。这就解决了我的问题。不过,最好评估其他解决方案:)