累积结果列表到词典

时间:2017-10-19 13:28:30

标签: python python-3.x

我正在寻找一种优雅且高效的方法,将算法的结果累积到累加器中。

accumulator = { "k1": 15, "k2": 0, "k3": 12}
# Output of the algorithm values[i] matches keys[i]
keys = ["k1", "k2", "k3"]
values = [ 12,   13 ,  14]

这里有两个解决我问题的解决方案,但我不相信有最好的解决方案。

简单的循环

for i in range(0, len(keys)):
    accumulator[keys[i]] += values[i]

使用发电机

accumulator = {keys[i]: accumulator[i] + values[i] for i in rage(0, len(keys))}

编辑:   - 字典的所有键都将出现在键列表中。

2 个答案:

答案 0 :(得分:1)

您可以在馆藏中使用计数器

from collections import Counter

keys = ["k1", "k2", "k3"]
values = [ 12,   13 ,  14]

c = Counter({ "k1": 15, "k2": 0, "k3": 12})
# to update value of k1 -this works even if k1 is not present
c.update(zip(keys, values))

答案 1 :(得分:0)

你可以试试这个:

for k, v in zip(keys, values):
    accumulator[k] += v

它与您的第一个版本非常相似,只是略微简洁一些。这仅在k中已存在accumulator时有效,除非您对defaultdict使用accumulator