在其中对dict和嵌套dicts进行子类化

时间:2013-02-05 14:46:39

标签: python dictionary python-2.7 override subclass

我有一个嵌套字典,我想将其转换为以下子类:

class SubDict(dict):
    def __getattr__(self, attr):
        if attr in self.keys():
            return self.get(attr)

如果我这样做,它对基础词典很有用:

my_nested_dict = SubDict(my_nested_dict)

但是我也需要将嵌套的转换为SubDict。我怎么能做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要递归嵌套字典并递归转换:

class SubDict(dict):
    def __init__(self, *args, **kw):
        super(SubDict, self).__init__(*args, **kw)
        for key, value in self.iteritems():
            if isinstance(value, dict):
                self[key] = SubDict(value)

你有没有看过collections.defaultdict?你可以很容易地从头开始创建一个树:

import defaultdict

def Tree(): return defaultdict(tree)

答案 1 :(得分:0)

如果您的SubDict课程除了您在此处显示的内容之外什么都不做,那么这是defaultdict as document by Harold Cooper on Github的工作:

def tree(): return defaultdict(tree)