合并具有相同密钥的python字典
我有一个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',
...
,其中键的所有词典中增加最多实例数。
在此先感谢。
你可以简单地retreive字典的电流大小为每个元素的关键。
myDict = {}
for dictionary in dictionaries:
for key in dictionary:
myDict[len(myDict)] = dictionary[key]
如你所说,如果键是从某种意义上说它们是连续的整数,并且你想要在第二个字典中附加值,即忘记它们的原始键,那么这可以工作:
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外部列表理解从接受这个问题的答案复制)
尝试是这样的:
vals = []
for d in list_of_dicts:
vals.extend(d.values())
max_dict = dict(enumerate(vals))
你的意思是'vals。扩展' –
一旦你纠正了语义(请参阅ThierryLathuille的评论),它的运行速度与我的单线一样快(见我的答案),即比yanneke接受的答案快20倍。 – steffen
要合并到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'}
这很慢。它的运行速度比我的单行程式慢大约80倍(请参阅我的答案) – steffen
能否请您包括您的代码只是一个小例子? – splinter
你想要发生什么,而不是覆盖常用密钥的值? – steffen
词典没有定义的顺序。那么如何对键进行编号,因为迭代字典不会产生定义的元素顺序。 – languitar