首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >键上字典列表中的合并值

键上字典列表中的合并值
EN

Stack Overflow用户
提问于 2022-01-13 01:12:45
回答 2查看 37关注 0票数 0

我有一堆白痴:

代码语言:javascript
复制
[{'dog': 'dog-1'}, {'monkey': 'monkey-1'}, {'buffalo': 'buffalo-6'}, {'dog': 'dog-2'},{'pig': 'pig-3'}, {'monkey': 'monkey-6'}, {'monkey': 'monkey-6'}]

我要把所有有相同钥匙的人都放进同一条狗屎里。我需要这个结果:

代码语言:javascript
复制
[{'dog': ['dog-1', 'dog-2']}, {'monkey': ['monkey-1', 'monkey-6', 'monkey-6']}, {'buffalo': ['buffalo-6']}, {'pig': ['pig-3']}]
EN

回答 2

Stack Overflow用户

发布于 2022-01-13 01:28:06

使用defaultdict

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

lst = [{'dog': 'dog-1'}, {'monkey': 'monkey-1'}, {'buffalo': 'buffalo-6'}, {'dog': 'dog-2'},{'pig': 'pig-3'}, {'monkey': 'monkey-6'}, {'monkey': 'monkey-6'}]

output = defaultdict(list)

for d in lst:
    for k,v in d.items():
        output[k].append(v)
票数 3
EN

Stack Overflow用户

发布于 2022-01-13 01:28:22

一般的想法是,在迭代列表时,您想知道是否已经找到了您以前见过的字典。如果您已经看到该键,那么您希望将其值附加到匹配键的值;如果没有,则希望创建一个带有默认值的新键(在本例中为空列表)。您可以使用dict.setdefault来完成这一任务。

代码语言:javascript
复制
out = {}
for d in lst:
    for k, v in d.items():
        out.setdefault(k, {}).setdefault(k, []).append(v)
out = list(out.values())

输出:

代码语言:javascript
复制
[{'dog': ['dog-1', 'dog-2']},
 {'monkey': ['monkey-1', 'monkey-6', 'monkey-6']},
 {'buffalo': ['buffalo-6']},
 {'pig': ['pig-3']}]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70690307

复制
相关文章

相似问题

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