首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并任意数量的列表字典

合并任意数量的列表字典
EN

Stack Overflow用户
提问于 2015-05-16 15:32:08
回答 4查看 427关注 0票数 4

如何将值为列表的字典合并到Python中,以便将所有键移动到一个字典中,而每个列表中的所有元素都移动到每个键的一个列表中?

例如,使用这些字典:

代码语言:javascript
复制
x = {'a': [2], 'b': [2]}
y = {'b': [11], 'c': [11]}

..。合并的结果应该如下:

代码语言:javascript
复制
{'a': [2], 'b': [2, 11], 'c': [11]}

怎么能用任何数量的字典,而不仅仅是两本呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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来增长列表:

代码语言:javascript
复制
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,其中自动默认值是一个新的空列表:

代码语言:javascript
复制
from collections import defaultdict

r = defaultdict(list)
for d in [x, y]:
    for k, v in d.items():
        r[k].extend(v)
票数 4
EN

Stack Overflow用户

发布于 2015-05-16 15:37:26

您可以使用以下方法,它使用setsdict comprehension

代码语言:javascript
复制
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}

结果:

代码语言:javascript
复制
{'a': [2], 'c': [11], 'b': [2, 11]}
票数 5
EN

Stack Overflow用户

发布于 2015-05-16 15:38:12

代码语言:javascript
复制
for k, v in y.items():
    x.setdefault(k, []).extend(v)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30277499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档