如何对以键为元组的Python字典中的值求和

Tom*_*mas 5 python dictionary

我有以下字典,键为元组

D_grpTagReport = { ('Tag1', '1'):345.56 ,
                   ('Tag1', '2'):45.6 ,
                   ('Tag2', '3'):3.1 ,
                   ('Tag3', '1'):21.56 ,
                   ('Tag2', '3'):1.56 ,
                 }
Run Code Online (Sandbox Code Playgroud)

我想获得每个唯一标签的值的总和。是否有任何内置实用程序可用于处理该字典。

结果示例:

Tag1 : 391.16     # (total of all Tag1)
Tag2 : 4.66       # (total of all Tag2) 
Tag3 : 21.56      # (total of all Tag3) 
Run Code Online (Sandbox Code Playgroud)

Ana*_*mar 1

您可以使用itertools.groupbythis ,首先获取.items()字典,然后根据键的第一个元素对该列表进行排序,并使用itertools.groupbykey作为键的第一个元素(元组的第一个元素的第一个元素key,value)。然后,对于每个组,您可以接管sum()这些值以获得您想要的。例子 -

from itertools import groupby
for key,group in groupby(sorted(D_grpTagReport.items()),key=lambda x:x[0][0]):
    total = sum(g[1] for g in group)
    print(key,':',total)
Run Code Online (Sandbox Code Playgroud)

请注意,您的结果有点错误,您的字典也是如此,因为dictionary不能具有具有多个值的相同键。

演示 -

>>> D_grpTagReport = { ('Tag1', '1'):345.56 ,
...                    ('Tag1', '2'):45.6 ,
...                    ('Tag2', '3'):3.1 ,
...                    ('Tag3', '1'):21.56 ,
...                    ('Tag2', '3'):1.56 ,
...                  }
>>>
>>>
>>> from itertools import groupby
>>> for key,group in groupby(sorted(D_grpTagReport.items()),key=lambda x:x[0][0]):
...     total = sum(g[1] for g in group)
...     print(key,':',total)
...
Tag1 : 391.16
Tag2 : 1.56
Tag3 : 21.56
Run Code Online (Sandbox Code Playgroud)