2016-11-22 66 views
3

我有如下所示的詞典的列表:字典緊湊列表成單個字典?

l = [{0: [1L, 743.1912508784121]}, {0: [2L, 148.34440427559701]}, {0: [5L, 1275.9155165676464]}, {0: [6L, 128.46132477853394]}, {0: [8L, 1120.5549823618721]}, {0: [9L, 1000.4359061629533]}, {0: [10L, 1000.4359061629533]}, {0: [11L, 1148.2027994669606]}, {0: [12L, 222.1206974476257]}, {0: [15L, 1024.0437005257695]}, {1: [8L, 606.0185176629063]}, {1: [13L, 115.54464589045607]}, {1: [14L, 1057.134622491455]}, {1: [16L, 1000.346200460439]}, {1: [17L, 285.73897308106336]}, {2: [3L, 941.8651982485691]}, {2: [4L, 1001.6313224538114]}, {2: [7L, 1017.0693313362076]}, {2: [11L, 427.7241587977401]}] 
在列表中有19個字典3個不同的鍵(0,1,2)該特定情況下

我想要做的是將它轉換成單個字典,其中每個密鑰的值由另一個字典創建。

因此,例如,提取列表的4個元素,我想壓縮此:

l = [{0: [1L, 743.1912508784121]}, {0: [2L, 148.34440427559701]}, {1: [13L, 115.54464589045607]}, {1: [14L, 1057.134622491455]}] 

到:

d = {0:{1L: 743.1912508784121, 2L: 148.34440427559701}, 1:{13L: 115.54464589045607, 14L: 1057.134622491455}} 

我希望我自己清楚

+0

*其中每個密鑰的值由另一個列表字典*製作 - 您能否詳細說明?在您的列表中有10個字典的鍵爲'0' – RomanPerekhrest

+0

@RomanPerekhrest:感謝您的快速回答。我編輯了這個問題..也許現在更清楚了.. – matteo

+0

你還沒有說明你想創建的新字典的關鍵字是否是唯一的(1L,2L等)。 – georgedeath

回答

2

這將會工作,希望代碼應該是不言自明的。

請注意,您需要在Python 2.x中使用dictionary.iteritems(),因爲dictionary.items()僅限於Python 3.x。

d ={} 
for dictionary in l: 
    for key, (k, v) in dictionary.items(): 
     if key not in d: 
      d[key] = {} 
     d[key][k] = v 
+1

不錯,它的作品! – matteo

+0

不要忘記接受答案,@matteo – georgedeath

2

您可以使用collections.defaultdict爲得到這樣的結果:

from collections import defautdict 

my_dict = defaultdict(dict) 

for d in l: 
    for k, (v1, v2) in d.items(): 
     my_dict[k][v1] = v2 

其中my_dict將舉行最後的值:

{0: {1L: 743.1912508784121, 2L: 148.34440427559701, 5L: 1275.9155165676464, 6L: 128.46132477853394, 8L: 1120.5549823618721, 9L: 1000.4359061629533, 10L: 1000.4359061629533, 11L: 1148.2027994669606, 12L: 222.1206974476257, 15L: 1024.0437005257695}, 1: {8L: 606.0185176629063, 16L: 1000.346200460439, 13L: 115.54464589045607, 14L: 1057.134622491455, 17L: 285.73897308106336}, 2: {11L: 427.7241587977401, 3L: 941.8651982485691, 4L: 1001.6313224538114, 7L: 1017.0693313362076}} 

注:由於dict可以有獨特的key小號,它將具有基於0123中的最後一個值的嵌套dict的值。

+0

好!這正是我所期待的 – matteo