如何将值为列表的字典合并到Python中,以便将所有键移动到一个字典中,而每个列表中的所有元素都移动到每个键的一个列表中?
例如,使用这些字典:
x = {'a': [2], 'b': [2]}
y = {'b': [11], 'c': [11]}..。合并的结果应该如下:
{'a': [2], 'b': [2, 11], 'c': [11]}怎么能用任何数量的字典,而不仅仅是两本呢?
发布于 2015-05-16 15:50:28
若要将所有列表集合在一起,请生成一个结果字典,将您的键映射到列表。最简单的方法是使用https://docs.python.org/2.7/library/stdtypes.html#dict.setdefault,然后调用https://docs.python.org/2.7/library/stdtypes.html#mutable-sequence-types来增长列表:
r = {}
for d in [x, y]:
for k, v in d.items():
r.setdefault(k, []).extend(v)更优雅的方法是使用https://docs.python.org/2.7/library/collections.html#collections.defaultdict,其中自动默认值是一个新的空列表:
from collections import defaultdict
r = defaultdict(list)
for d in [x, y]:
for k, v in d.items():
r[k].extend(v)发布于 2015-05-16 15:37:26
您可以使用以下方法,它使用sets和dict comprehension
x = {'a': [2], 'b': [2]}
y = {'b': [11], 'c': [11]}
all_keys = set(x) | set(y)
print {k:x.get(k, [])+y.get(k, []) for k in all_keys}结果:
{'a': [2], 'c': [11], 'b': [2, 11]}发布于 2015-05-16 15:38:12
for k, v in y.items():
x.setdefault(k, []).extend(v)https://stackoverflow.com/questions/30277499
复制相似问题