簡體   English   中英

將某些元素作為列表的字典列表中的求和值

[英]Sum Values in List of Dictionaries with some elements as list

我有這個字典列表:


list_of_dicts = [{'A':1,'B':2,'C':3,'D':4,'E':5}, {'A':1,'B':1,'C':1,'D':1,'E':1}, {'A':2,'B':2,'C':2,'D':2,'E':2}]

總結價值,我可以像這樣使用計數器:

from collections import Counter
import functools, operator
# sum the values with same keys
counter = Counter()
for d in list_of_dicts: 
    counter.update(d)
      
result = dict(counter) 
result
{'A': 4, 'B': 5, 'C': 6, 'D': 7, 'E': 8}

但是如果字典中的某個鍵具有列表值,如何實現求和:

list_of_dicts = [{'A':1,'B':2,'C':3,'D':4,'E':[1,2,3]}, {'A':1,'B':1,'C':1,'D':1,'E':[1,2,3]}, {'A':2,'B':2,'C':2,'D':2,'E':[1,2,3]}]

我想得到這個結果:

{'A': 4, 'B': 5, 'C': 6, 'D': 7, 'E':[3,6,9]}

如果你不能使用numpy你可以試試這個:

(使用collections.defaultdict

from collections import defaultdict
list_of_dicts = [{'A':1,'B':2,'C':3,'D':4,'E':[1,2,3]}, 
                 {'A':1,'B':1,'C':1,'D':1,'E':[1,2,3]}, 
                 {'A':2,'B':2,'C':2,'D':2,'E':[1,2,3]}]

dct = defaultdict(list)
for l in list_of_dicts:
    for k,v in l.items():
        dct[k].append(v)
        
for k,v in dct.items():
    if isinstance(v[0],list):
        dct[k] = [sum(x) for x in zip(*v)]
    else:
        dct[k] = sum(v)

輸出:

>>> dct
defaultdict(list, {'A': 4, 'B': 5, 'C': 6, 'D': 7, 'E': [3, 6, 9]})

如果你可以使用numpy你可以試試這個:

import numpy as np

dct = defaultdict(list)
for l in list_of_dicts:
    for k,v in l.items():
        dct[k].append(v)

for k,v in dct.items():
    dct[k] = (np.array(v).sum(axis=0))

輸出:

>>> dct
defaultdict(list, {'A': 4, 'B': 5, 'C': 6, 'D': 7, 'E': array([3, 6, 9])})

暫無
暫無

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

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