合并 python 个具有相同键的字典
merging python dictionaries with same keys
我有一个 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',
...
其中键增加到所有字典中的实例数。
提前致谢。
如果如您所说,键是某种意义上的 id,即它们是连续的整数,并且您想将值附加到第二个字典中,即忘记它们的原始键,那么这可以工作:
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))
您可以简单地检索字典的当前大小作为每个元素的键。
myDict = {}
for dictionary in dictionaries:
for key in dictionary:
myDict[len(myDict)] = dictionary[key]
要将 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'}
我有一个 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',
...
其中键增加到所有字典中的实例数。
提前致谢。
如果如您所说,键是某种意义上的 id,即它们是连续的整数,并且您想将值附加到第二个字典中,即忘记它们的原始键,那么这可以工作:
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))
您可以简单地检索字典的当前大小作为每个元素的键。
myDict = {}
for dictionary in dictionaries:
for key in dictionary:
myDict[len(myDict)] = dictionary[key]
要将 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'}