さわやかに

Pythonのことだったり子供のことだったり

Python setdefaultメソッド 要素がない場合のみ追加


あれ、どうやって書くんだっけ?といつも思うので備忘録。

 

setdefaultメソッド

辞書型(dict)に要素(key)が存在しない時のみ要素を追加する。
存在する時は何もせず、エラーを出さない。

dict.setdefault(要素[, 値])


最初にまとめを書いておきます。

  • dict[要素] = 値    ・・・要素があれば上書き、なければ要素を追加
  • dict[要素] += 値    ・・・要素があれば値をプラス、なければエラー
  • dict.setdefault(要素, 値)・・・要素があればスルー、なければ要素を追加


例として、
要素(key)が商品名、値(value)が在庫数のデータを持つ辞書型dictがあるとし、
在庫を増やしたり減らしたり、新商品が入ってきたらdictに要素を追加するモジュール。


 'peach'という要素がないのでエラーが発生してしまう。

>>> dict = {'apple' : 5, 'orange' : 1, 'grape' : 10}    # 在庫
>>> dict['apple'] += 1    # 'apple'が1つ増えた
>>> dict
 {'apple': 6, 'orange': 1, 'grape': 10}
>>> dict['peach'] += 1    # 'peach'が1つ増えた
KeyError: 'peach'    # 'peach'という要素がないのでエラー

エラーを出さないようにするにはif文にしよう! 

>>> dict = {'apple' : 5, 'orange' : 1, 'grape' : 10}    # 在庫
>>> if  'peach' in dict:
            duct['peach'] += 1    # dictに'peach'がある場合は+1
    else:
            dict['peach'] = 1     # dictに'peach'がない場合は新商品として値を1

 

if分を使わずにもっと簡単な書き方がある。
setdefaultメソッドを使えばエラーが出ず記述できる。

>>> dict = {'apple' : 5, 'orange' : 1, 'grape' : 10}    # 在庫
>>> dict.setdefault('apple', 0)    # 在庫に'apple'がなければ新商品として値ゼロ
>>> dict.['apple'] += 1    # 'apple'の在庫を+1
>>> dict
{'apple': 6, 'orange': 1, 'grape': 10, 'peach': 1}
>>> dict.setdefault('peach', 0)    # 在庫に'peach'がなければ新商品として値ゼロ
>>> dict['peach'] += 1    # 'peach'の在庫を+1

以上です。