1

我有一個orderdicts列表。我想將它們全部結合在一起,然後按照它們中的水果屬性對它們進行排序。我一直在使用defaultdict通過下面的代碼進行組合和排序。如何使用defaultdict行爲擴展OrderedDict

super_dict_apple = defaultdict(list) 
super_dict_orange = defaultdict(list) 
super_dict_no_fruit = defaultdict(list) 


for d in dict: 
     if 'fruit' not in d: 
      for k, v in d.iteritems(): 
       super_dict_no_fruit[k].append(v) 
     elif d['fruit'] == 'Apple': 
      for k, v in d.iteritems(): 
       super_dict_apple[k].append(v) 
     elif d['fruit'] == 'orange': 
      for k, v in d.iteritems(): 
       super_dict_orange[k].append(v) 

用這個我得到一個鍵和所有相關的值,但我鬆了原來的順序。所以我試圖用orderDict來做,但我無法實現它,下面是我的嘗試。

from collections import OrderedDict 

order_dict_no_fruit = OrderedDict() 
order_dict_apple = OrderedDict() 
order_dict_orange = OrderedDict() 

for d in dict: 
     if 'fruit' not in d: 
      for k, v in d.iteritems(): 
       order_dict_no_fruit[k].append(v) 
     elif d['fruit'] == 'Apple': 
      for k, v in d.iteritems(): 
       order_dict_apple[k].append(v) 
     elif d['fruit'] == 'orange': 
      for k, v in d.iteritems(): 
       order_dict_orange[k].append(v) 

我的主要目標是保持字典的原始順序,但它們組合成基於水果鍵三種不同的orderDicts。

+2

**它是如何不工作**。您應該始終能夠詳細描述。 –

+1

請給出一個你得到的例子和你期望的另一個例子。 – Soviut

+0

可能,它不起作用,因爲OrderedDict不是'defaultdict',所以它在訪問時不會自動設置默認值。如果只有'dict'方法* setdefault * ... DOTDOT –

回答

2

而不是常規OrderedDict的,嘗試一個子類,在defaultdict行爲補充說:

class OrderedDictWithDefaultList(OrderedDict): 
    def __missing__(self, key): 
     value = list() 
     self[key] = value 
     return value 
+0

我似乎得到這個錯誤。 – user3609179

+0

'TypeError:'type'object has no attribute'__getitem__'' – user3609179

+0

您的代碼中有其他地方出現錯誤。也許你在實例化字典時不用括號。它應該是''super_dict_apple = OrderedDictWithDefaultList()''而不是''super_dict_apple = OrderedDictWithDefaultList''。 –