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

时间:2016-01-18 09:04:16

标签: python dictionary configobj

我目前正在我的一个项目中使用ConfigObj来构建基于文本的配置文件,而且非常简洁。 它返回的数据结构是一个普通的dict类型,在我的情况下,它可以包含许多其他dicts作为值,它们本身可以包含dicts,依此类推。 我正在寻找用类包装主dict的最pythonic方法,以实现 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 用于普通的dicts。我想知道如何将它用于嵌套dicts。我不认为这是一个天真的问题。

1 个答案:

答案 0 :(得分:1)

嗯,我在建议的帖子中更多,我实际上找到了一个很好的解决方案,就是使用这个包:

https://pypi.python.org/pypi/attrdict

这正是我想要的,递归。 这解决了我的问题。不过,评估其他解决方案会很好:)