【问题标题】:Sum Values in List of Dictionaries with some elements as list字典列表中的总和值,其中一些元素作为列表
【发布时间】:2021-11-15 14:02:38
【问题描述】:

我有这个字典列表:


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]}

【问题讨论】:

    标签: python python-3.x list dictionary


    【解决方案1】:

    如果你不能使用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])})
    

    【讨论】:

    • 非常感谢。这就是我想要实现的目标。
    猜你喜欢
    • 2016-06-15
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多