2017-02-25 31 views
0

空の辞書があります。これは更新メソッドで操作しています。変数としてキーを使用し、値として+1を使用しています。以下を参照してください:dict.update()が正常に動作しない

myDict, var = {}, 10 
myDict.update({ var : +1 }) 

これを2回実行するとします。私はmyDict = {10 : 2}を期待しています。代わりに、それは{10 : 1}です。私は私が直接行うことによってこの問題を解決することができます理解

myDict[var] += 1 
print (myDict) 
{10 : 2} 

はしかし、varvarは任意の番号にすることができ、私はインクリメントしたい常に10ではありません。 10以外の数字だった場合は、キーが辞書に存在しないため、KeyErrorと表示されます。

変数をキーとして辞書を更新し、値を1に設定するにはどうすればよいですか?そのキーがすでにmyDictに存在する場合は、代わりにそれぞれの値を増やしますか?

私はすでにtryとexcept文でこれを行っていますが、Pythonicではないと思います。

try: 
    myDict[var] += 1 
except: 
    myDict.update({ var : 1 }) 

このようにして、varの値を1ずつ増やそうとします。キーが存在しない場合、代わりにmyDictが更新され、キーを作成して値を1に設定します。より良い方法がありますか?

答えて

3

あなたはカウンターを求めています。あなたがしたい場合は、d[var] = d.get(var, 0) + 1を使って、無地のdictと同じ結果を得ることができます

from collections import Counter 

c = Counter() 
var = 10  
c.update({var: 1}) 
print(c) # Counter({10: 1}) 
c.update({var: 1}) 
print(c) # Counter({10: 2}) 

しかし、Counterオプションは、私の意見では、この場合は明確です:Pythonはcollectionsモジュールにあなたのためにこれを提供しています。

+0

これは非常にうまく動作します。パンダのデータフレームにカウンタを追加することは可能ですか?私はプログラムの最後にこれをしたいと思います。 –

+0

データフレームは辞書を入力として受け取ることができるので、何らかの理由でカウンタを受け入れなかった場合は驚きます。そうでなければ 'dict(c)'を使うことができます。 –

+0

@AugustWilliamsカウントがスカラーのように見える場合は、インデックスを渡すだけで済みます。 'pd.DataFrame(Counter([4,5,2,4,5])、index = [0])' – miradulo

関連する問題