![](/img/trans.png)
[英]How to combine dictionaries in a list into one dictionary with values of same keys added?
[英]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.