簡體   English   中英

如何使用相同的鍵將字典值填充為列表

[英]How to populate dictionary values as list with the same keys

我有字典清單。 我需要在循環中(或任何其他方式)將每個鍵下的字典值增大為列表。

dl= [{'A':1, 'B':2}, {'A':3, 'B':4}, {'A':5, 'B':6}]
for d in dl:
    ?????

我需要的是這樣的字典:

{'A':[1,3,5], 'B': [2,4,6]}

我需要一種不使用pandas數據框的方法。 非常感謝。

使用字典,您可以使用get()和默認值:

dgroups = {}
for d in dl:
    for k, v in d.items():
        dgroups[k] = dgroups.get(k, []) + [v]
print(dgroups)

輸出:

{'A': [1, 3, 5], 'B': [2, 4, 6]}

或者,如果您不介意使用defaultdict:

from collections import defaultdict

dl= [{'A':1, 'B':2}, {'A':3, 'B':4}, {'A':5, 'B':6}]
groups = defaultdict(list)
for d in dl:
    for k, v in d.items():
        groups[k].append(v)
print(groups)

輸出:

defaultdict(<class 'list'>, {'A': [1, 3, 5], 'B': [2, 4, 6]})

您可以遍歷擁有的字典列表,並使用列表中擁有的字典中的鍵和值填充新的空字典。

final_d = {}


dl= [{'A':1, 'B':2}, {'A':3, 'B':4}, {'A':5, 'B':6}]

for d in dl:
    for key, val in d.items():
        if key not in final_d.keys():
            final_d[key] = []
            final_d[key].append(val)
        else:
            final_d[key].append(val)

print(final_d) 

# Output : {'B': [2, 4, 6], 'A': [1, 3, 5]}

由於默認情況下不對python字典進行排序,因此結果字典不需要按順序排列。 如果要訂購字典,請從collections模塊中檢查OrderedDict

命令式的實現:

dl= [{'A':1, 'B':2}, {'A':3, 'B':4}, {'A':5, 'B':6}]

result = dict()
for d in dl:
    for dk, dv in d.items():
        arr = result.get(dk, [])
        arr.append(dv)
        result[dk] = arr

功能/ python風格的實現:

from functools import reduce
dl= [{'A':1, 'B':2}, {'A':3, 'B':4}, {'A':5, 'B':6}]

def merge_dicts(m1, m2):
    for k, v in m2.items():
        if k not in m1:
            m1[k] = list()
        m1[k].append(v)
    return m1

result = reduce(lambda prev, curr: merge_dicts(prev, curr), dl, dict())

暫無
暫無

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

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