2017-10-19 4 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] 

ここでは私の問題を解決する2つの解決方法がありますが、私は最高のものがあると確信していません。

ループ

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 

それはちょうど少しより簡潔、あなたの最初のバージョンと非常に似ています。これは、accumulatordefaultdictを使用しない限り、accumulatorにすでにkが存在する場合にのみ機能します。

関連する問題