2017-04-17 15 views
0

辞書を使って操作を簡素化しようとしています。問題は、時々キーが存在しないので、私はまずKeyErrorのために試しなければならないが、私はそれを過度にしているように感じる。dictキーに値を追加するpythonic方法ですが、存在しない場合は0にしてから値を追加してください。

例:あなたがここに見ることができるよう

x = {'a': 0, 'b': 0} 

for key in ['a', 'b', 'c']: 
    for i in range(0, 10): 
     try: 
      x[key] += i 
     except KeyError: 
      x[key] = 0 
      x[key] += i 

、 'C' キーのdoesntが存在するので、私は最初にしてみてください。それが可能ならtry部分をスキップする方法を探しています。

ありがとうございます!

答えて

8

あなたは要素が辞書にある場合iを追加する前に、右を確認することができますdefaultdict

from collections import defaultdict 
x = defaultdict(int) 
+0

ありがとうございました! –

0

を使用してください。そうでない場合は、新しい要素を作成し、デフォルト値の0を入れます。その後、通常の行動とi

x = {'a': 0, 'b': 0} 

for key in ['a', 'b', 'c']: 
    for i in range(0, 10): 
     if key not in x: 
      x[key] = 0 
     x[key] += i 
2

は、多分あなたは

これは試す辞書のメソッドgetを使用することができます追加します。

x[key] = x.get(key,0) +i 

完全なコードは:

x = {'a': 0, 'b': 0} 

for key in ['a', 'b', 'c']: 
    for i in range(0, 10): 
     x[key] = x.get(key,0) +i 
2

これを試してみてください

x = {'a': 0, 'b': 0} 

for key in ['a', 'b', 'c']: 
    for i in range(0, 10): 
     x[key] = x.get(key, 0) + i 
+0

ありがとう、その仕事! –

+0

他の人がそれを使用できるように答えを受け入れる:) –

0

あなたがそうのように、それを反復処理し、その後、リストの内包と条件を使用して、辞書内に存在するキーをフィルタリングすることができます

x = {'a': 0, 'b': 0} 

for key in [key for key in ['a', 'b', 'c'] if key in x.keys()]: 
    for i in range(0, 10): 
     x[key] += i 

print x 

出力

{'a': 45, 'b': 45} 
関連する問題