2013-02-05 80 views
0

我有一個嵌套的字典,我要轉換爲以下子我所做的:子類字典和嵌套類型的字典

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

如果我這樣做,它的基礎字典的偉大工程:

my_nested_dict = SubDict(my_nested_dict) 

但我需要嵌套的轉換爲SubDict。我怎麼能做到這一點?

謝謝!

+0

「解決」它通過添加'attr = self.get(attr);返回SubDict(attr)if isinstance(attr,dict)else attr' to the code。麻煩抱歉! – Megaslav

回答

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) 
+0

@Megaslav:你正在做同樣的事情,只是在檢索和每一次,我的代碼在實例化和一次。 –

+0

你是對的Martijin,偉大的代碼!這是我需要的,謝謝! – Megaslav

0

如果您SubDict類做了什麼比你在這裏展示其他什麼,這是defaultdictas document by Harold Cooper on Github工作:

def tree(): return defaultdict(tree) 
+0

我用它來檢索dict.key.sub_dict_key.sub_sub_dict_key時尚中的值。 defaultdict似乎沒有這樣做。 – Megaslav

+0

Tink我讀過你使用'__getattr__'替代'__init__'的事實,所以我的回答並不好(defaultdict * is *雖然:)) – akaIDIOT