我在列表中有一堆键值:
all = [('a' : '87'), ('b': '72'), ('a' : '39'), ('b' : '84')]
如何快速总结具有相同键的所有值?
输出:
a = 126
b = 156
答案 0 :(得分:2)
字典中不能有重复的键。以后匹配的密钥会覆盖之前的密钥。另外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}
答案 1 :(得分:0)
首先,在Python中,据我所知,没有数据类型表示:
[('a' : '87'), ('b': '72'), ('a' : '39'), ('b' : '84')]
,
可能你指的是一个dict
,顺便说一下,你不能使用重复的密钥。
这个答案与@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}