簡體   English   中英

在鍵上的字典列表中合並值

[英]Merge values in a list of dictionaries on key

我有那一系列的字典:

[{'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']}]

使用defaultdict

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)

一般的想法是,當您遍歷列表時,您想知道您是否已經到達了一個您以前已經看過其鍵的字典。 如果你已經看過那個鍵,那么你想把 append 的值改為匹配鍵的值; 如果沒有,您想創建一個具有默認值的新鍵(在本例中為空列表)。 您可以使用dict.setdefault來做到這一點。

out = {}
for d in lst:
    for k, v in d.items():
        out.setdefault(k, {}).setdefault(k, []).append(v)
out = list(out.values())

Output:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM