我有一堆白痴:
[{'dog': 'dog-1'}, {'monkey': 'monkey-1'}, {'buffalo': 'buffalo-6'}, {'dog': 'dog-2'},{'pig': 'pig-3'}, {'monkey': 'monkey-6'}, {'monkey': 'monkey-6'}]我要把所有有相同钥匙的人都放进同一条狗屎里。我需要这个结果:
[{'dog': ['dog-1', 'dog-2']}, {'monkey': ['monkey-1', 'monkey-6', 'monkey-6']}, {'buffalo': ['buffalo-6']}, {'pig': ['pig-3']}]发布于 2022-01-13 01:28:06
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)发布于 2022-01-13 01:28:22
一般的想法是,在迭代列表时,您想知道是否已经找到了您以前见过的字典。如果您已经看到该键,那么您希望将其值附加到匹配键的值;如果没有,则希望创建一个带有默认值的新键(在本例中为空列表)。您可以使用dict.setdefault来完成这一任务。
out = {}
for d in lst:
for k, v in d.items():
out.setdefault(k, {}).setdefault(k, []).append(v)
out = list(out.values())输出:
[{'dog': ['dog-1', 'dog-2']},
{'monkey': ['monkey-1', 'monkey-6', 'monkey-6']},
{'buffalo': ['buffalo-6']},
{'pig': ['pig-3']}]https://stackoverflow.com/questions/70690307
复制相似问题