Python 将词典列表压缩成单个词典?

Python 将词典列表压缩成单个词典?,python,list,dictionary,Python,List,Dictionary,我有一个字典列表,如下所示: 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, 114

我有一个字典列表,如下所示:

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]}]
进入:


我希望我清楚地说明了这一点,希望代码应该是不言自明的

注意,您需要在Python2.x中使用
dictionary.iterms()
,因为
dictionary.items()
仅是Python3.x

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

您可以通过以下方式获得此结果:

其中,
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
可以具有唯一的
s,因此它将根据
列表中的最后一个值

具有嵌套的
dict
值,其中每个键的值由另一个列表字典生成-您能详细说明吗?您的字典中有10个键为
0
的字典list@RomanPerekhrest:谢谢你的快速回答。我编辑了这个问题。。也许现在更清楚了。你们还并没有说明你们想要创建的新字典的键是否是唯一的(1L,2L,等等)。好吧!这正是我想要的
from collections import defautdict

my_dict = defaultdict(dict)

for d in l:
    for k, (v1, v2) in d.items():
        my_dict[k][v1] = v2
{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}}