我有一个字典列表,例如:
dictList = [
{'a':3, 'b':9, 'c':4},
{'a':9, 'b':24, 'c':99},
{'a':10, 'b':23, 'c':88}
]
所有字典都有相同的键,例如a, b, c。我希望创建一个具有相同键的字典,其中的值是原始列表中所有字典中具有相同键的值的总和。
因此对于上面的例子,输出应该是:
{'a':22, 'b':56, 'c':191}
做到这一点最有效的方法是什么?我目前有:
result = {}
for myDict in dictList:
for k in myDict:
result[k] = result.setdefault(k, 0) + myDict[k]
如果所有字典都有所有键,您可以这样做:
>>> dict((key, sum(d[key] for d in dictList)) for key in dictList[0])
{'a': 22, 'b': 56, 'c': 191}
[Edit]如果速度是重中之重,您还可以使用以下命令来减少约 20%(尽管会牺牲一些可读性):
import operator, itertools
dict((key, sum(itertools.imap(operator.itemgetter(key), dictList)))
for key in dictList[0])
速度取决于字典的大小。对于原始 3 项列表和各种不同大小(通过将原始列表乘以 10、100 或 1000 等创建),我得到以下计时:
List Size Original dict+generator imap+itemgetter
3 0.054 0.090 0.097
30 0.473 0.255 0.236
300 4.668 1.884 1.529
3000 46.668 17.975 14.499
(10,000 次运行的所有时间)
因此,对于 3 个列表来说,速度会稍微慢一些,但对于较大的列表来说,速度会快两到三倍。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)