我目前正在我的一个项目中使用 ConfigObj 来拥有基于结构化文本的配置文件,它非常整洁。它返回的数据结构是普通的字典类型,在我的例子中,它可以包含许多其他字典作为值,这些字典本身可以包含字典,依此类推。我正在寻找最python的方式将主字典与类包装在一起,以便实现类似getattr的东西,以使用点符号递归检索项目。像这样:
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
不幸的是,这仅适用于第一层。如果我调用的键的值也是 L2 字典,我实际上希望这是递归的,并且递归到内层。
像这样的调用:
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
它完全符合我的需求,递归。这解决了我的问题。不过,评估其他解决方案会很好:)