Python 如何对字典中的唯一键求和?

Python 如何对字典中的唯一键求和?,python,dictionary,sum,Python,Dictionary,Sum,我在列表中有一系列关键值: all = [('a' : '87'), ('b': '72'), ('a' : '39'), ('b' : '84')] 如何快速汇总具有相同键的所有值 输出: a=126 b=156 字典中不能有重复的键。稍后匹配的键将覆盖较早的键。另外,dict是一个非常糟糕的名字,因为它隐藏了dict类类型: >>> D = {'a' : '87', 'b': '72', 'a' : '39', 'b' : '84'} >>> D {'b

我在列表中有一系列关键值:

all = [('a' : '87'), ('b': '72'), ('a' : '39'), ('b' : '84')]
如何快速汇总具有相同键的所有值

输出:

a=126
b=156

字典中不能有重复的键。稍后匹配的键将覆盖较早的键。另外,
dict
是一个非常糟糕的名字,因为它隐藏了
dict
类类型:

>>> D = {'a' : '87', 'b': '72', 'a' : '39', 'b' : '84'}
>>> D
{'b': '84', 'a': '39'}
但是,如果将数据成对存储在列表中,则:

>>> L=[('a','87'), ('b', '72'), ('a','39'), ('b','84')]
>>> L
[('a', '87'), ('b', '72'), ('a', '39'), ('b', '84')]
defaultdict
为不存在的密钥创建其默认类型,因此如果密钥尚未存在,则下面的
D[k]
将为零:

>>> from collections import defaultdict
>>> D = defaultdict(int)
>>> for k,v in L:
...   D[k] += int(v)
...
>>> D
defaultdict(<class 'int'>, {'b': 156, 'a': 126})
>>> dict(D)
{'b': 156, 'a': 126}
>>从集合导入defaultdict
>>>D=默认dict(int)
>>>对于L中的k,v:
...   D[k]+=int(v)
...
>>>D
defaultdict(,{'b':156,'a':126})
>>>迪克特(D)
{'b':156,'a':126}

首先,据我所知,在Python中没有这样的数据类型表示:

[('a':'87'),('b':'72'),('a':'39'),('b':'84')]
,

很可能,您指的是一个
dict
,顺便说一句,您不能用duplicate键使用它

这个答案与@Mark Tolonen的答案非常相似,除了只使用基本数据类型而不使用模块:

>>> a = [('a','87'), ('b','72'), ('a','39'), ('b','84')]
>>> d = {}
>>> 
>>> for k,v in a:
        #if k already exists in d, just add up the values
        if k in d:
            d[k] += int(v)
        #otherwise, create a (k,int(v)) pair in the dict
        else:
            d[k] = int(v)


>>> d
{'a': 126, 'b': 156}

字典中不能有重复的键。此代码有两种错误。(1) 不能使用重复的密钥,它将替换它们。(2) 您将其命名为dict。祝贺您,您刚刚隐藏了一个重要类型的名称。很抱歉,您不能这样做,因为您不能使用重复的密钥(它将替换它们)。所以你也许应该使用另一种类型,比如tuple,我只是用dict作为例子,但当我回头看的时候,我看到了你所说的没有重复项。我把数据转换成一个列表。我可以从这里总结一下吗?您在Python中发布了一个错误的数据类型表示形式
('a':'39')
??