2017-10-19 41 views
0

我正在尋找一個優雅和高性能的方法,累積到累加器的算法的結果。積累結果列表到一個字典

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循環

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))} 

編輯: - 字典的所有按鍵將出現在密鑰列表。

+0

您的生成器版本將會丟失'accumulator'中的任何不屬於'keys'的條目。 –

+0

這不是一個問題,所有存在於累加器中的鍵都會出現在鍵列表中(我編輯了問題)。 – moeryn

+1

你想創建一個'dict(zip(keys,values))'並用它更新'Counter'? (不適合不計數的東西,介意。) – Ryan

回答

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)) 
+0

不知道計數器,數據結構完全符合用例 – moeryn

0

你可以試試這個:

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

這是非常相似,你的第一個版本,只要稍微更簡潔。如果k已經存在於accumulator中,則此操作才起作用,除非您使用代替accumulator