2017-04-12 92 views
-3

我有一个Python字典列表,其中包含相同的密钥。我想从列表中的字典中创建一个大字典。事情是我无法使用更新来创建一个新的密钥,因为由于密钥相同,每个密钥的值在过程中被覆盖。我的列表的样品是:合并具有相同密钥的python字典

[{0: u'ChIJIxtmpVdCQg0R_TCH5ttvqC0', 
    1: u'ChIJ2RMaMThvQg0R_6hmMXFiG_M', 
    ... 
    195: u'ChIJv1KfnmMpQg0R5iC9EmaXN6M', 
    196: u'ChIJd0vQCiOEQQ0RasOKsxksdys'}, 
{0: u'ChIJIxtmpVdCQg0R_TCH5ttvqC0', 
    1: u'ChIJ2RMaMThvQg0R_6hmMXFiG_M', 
    2: u'ChIJQ3PGOWlfQg0RkV-a6JQdrFs', 
    3: u'ChIJ-TjccjhvQg0RVQmnPNgAJv4', 
    ... 
    100: u'ChIJN7zqEhgmQg0R-NzvqSYG_Ds', 
    101: u'ChIJPTR-xaYoQg0RUrX7K8kQhU4', 
    102: u'ChIJV_pHsIsoQg0ReGKLBXDqOc8', 
    103: u'ChIJtXpyqps7Qg0RXq37551oP4o',... 

我要的是以下形式的一个更大的字典:

{0: u'ChIJIxtmpVdCQg0R_TCH5ttvqC0', 
    1: u'ChIJ2RMaMThvQg0R_6hmMXFiG_M', 
    2: u'ChIJQ3PGOWlfQg0RkV-a6JQdrFs', 
    3: u'ChIJ-TjccjhvQg0RVQmnPNgAJv4', 
    ... 
    195: u'ChIJv1KfnmMpQg0R5iC9EmaXN6M', 
    196: u'ChIJd0vQCiOEQQ0RasOKsxksdys', ###HERE STARTS THE NEW DICT!! 
    197: u'ChIJIxtmpVdCQg0R_TCH5ttvqC0', 
    198: u'ChIJ2RMaMThvQg0R_6hmMXFiG_M', 
    199: u'ChIJQ3PGOWlfQg0RkV-a6JQdrFs', 
    ... 

,其中键的所有词典中增加最多实例数。

在此先感谢。

+2

能否请您包括您的代码只是一个小例子? – splinter

+0

你想要发生什么,而不是覆盖常用密钥的值? – steffen

+0

词典没有定义的顺序。那么如何对键进行编号,因为迭代字典不会产生定义的元素顺序。 – languitar

回答

1

你可以简单地retreive字典的电流大小为每个元素的关键。

myDict = {} 
for dictionary in dictionaries: 
    for key in dictionary: 
    myDict[len(myDict)] = dictionary[key] 
+0

它很完美!非常感谢你! –

+3

'dict'是一个Python内置函数,您不应该将它用作变量名称。 –

+1

这很慢。没有冒犯,但我的单线(见我的答案)跑了20倍。 – steffen

0

如你所说,如果键是从某种意义上说它们是连续的整数,并且你想要在第二个字典中附加值,即忘记它们的原始键,那么这可以工作:

dict(enumerate(list(dict1.values()) + list(dict2.values()))) 

如果有两个以上的源字典,一点点额外的魔法是必要的:

dict(enumerate([item for sublist in [list(d.values()) for d in dicts] for item in sublist])) 

Making a flat list out of list of lists in Python外部列表理解从接受这个问题的答案复制)

+0

事情是我没有在我的列表中只有2个字母,但是9. –

+0

@GonzaloDonoso:更新了我的答案。 – steffen

+0

哇,谁投下我的答案:请详细说明! – steffen

1

尝试是这样的:

vals = [] 
for d in list_of_dicts: 
    vals.extend(d.values()) 

max_dict = dict(enumerate(vals)) 
+1

你的意思是'vals。扩展' –

+0

一旦你纠正了语义(请参阅ThierryLathuille的评论),它的运行速度与我的单线一样快(见我的答案),即比yanneke接受的答案快20倍。 – steffen

0

要合并到dict2这dict1应该工作

dict1 = {1: 'a', 2: 'b'} 
dict2 = {1: 'c', 2: 'd'} 

max_key_in_dict1 = max(dict1.keys()) 
for key in dict2.keys(): 
    dict1[key+max_key_in_dict1] = dict2[key] 
del dict2 

dict1则是:

{1: 'a', 2: 'b', 3: 'c', 4: 'd'} 
+0

这很慢。它的运行速度比我的单行程式慢大约80倍(请参阅我的答案) – steffen