使用点表示法从嵌套的 python 字典中检索值



我目前正在我的一个项目中使用 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

它完全符合我的需求,递归。这解决了我的问题。不过,评估其他解决方案会很好:)

最新更新