[Python] setdefaultを使って辞書の値を取得&追加する

python-dictionary-setdefault


Python3で、辞書の値を取得する時にsetdefault()メソッドを使うと、指定したキーが辞書に存在すれば値を取得し、キーが存在しない時は指定した値を辞書に追加してくれるということを知ったので、使い方をメモしておく。

キーが存在しない時に、辞書には追加せずに指定の値を返すだけの時は、get()メソッドが役立つ。

getメソッドについては以下の記事を参照。
[Python] getメソッドを使って辞書の値を取得する


setdefault()の使い方

setdefault()の使い方は以下の通り。

辞書.setdefault(キー, デフォルト値)

1つ目の引数であるキーは、辞書に存在するか調べるキーを指定する。このキーが辞書に存在した時、setdefault()はキーの値を返す。

キーが存在しなかった場合は、2つ目の引数であるデフォルト値に指定した値を辞書に登録する。


setdefault()を使ってみる

キーが存在する場合

まずは、setdefault()で指定したキーが辞書に存在していた時の挙動を見てみる。
dic_fruits = {'りんご':10, 'みかん':5}

num = dic_fruits.setdefault('みかん', 0)
print(num)
print(dic_fruits)

#結果
5
{'りんご': 10, 'みかん': 5}

この例では、果物の個数を管理するdic_fruitsという辞書を使う。
まず、dic_fruitsにりんごとみかんを登録し、その後でsetdefault()のキーにみかんを指定する。

みかんは既に辞書に登録されているので、setdefault()はみかんの個数である5を返す。もちろん辞書自体にはなんの変更もない。

キーが存在しない場合

続いて、setdefault()で指定したキーが辞書に存在しなかった場合の挙動を見てみる。
dic_fruits = {'りんご':10, 'みかん':5}

num = dic_fruits.setdefault('いちご', 0)
print(num)
print(dic_fruits)

#結果
0
{'りんご': 10, 'いちご': 0, 'みかん': 5}

今回も果物の個数を管理するdic_fruitsを用意してりんごとみかんを登録する。

そして、setdefault()のキーには、辞書に存在しないいちごを指定する。

その結果、setdefault()は2つ目の引数で指定した0を返す。さらに、辞書には新たにいちごがキー、値が0の要素が登録される。




setdefault()を使うメリット

get()メソッドと同じように、setdefault()を使うことでキーがない場合にKeyErrorが発生するのを防ぐことができる。

get()メソッドでは、キーが存在する時はキーの値、キーが存在しない時には指定の値を返すという処理を、ifとinを使うよりも簡潔に書くことができた。

setdefault()でもifとinを使う記述を簡潔化することができる。

辞書を使って集計を行う

今回は、辞書を使って集計を行う処理にsetdefault()を使ってみる。

さっきと同じようにdic_fruitsという辞書で果物と果物の個数を管理する。既に辞書に登録されている果物は個数を1個増やし、辞書に登録されていない果物は個数1で辞書に登録する。

ifとinを使って集計する

dic_fruits = {'りんご':10, 'みかん':5}

key = input('キーを入力してください:')
if key in dic_fruits:
    dic_fruits[key] += 1
else:
    dic_fruits[key] = 1

print(dic_fruits)
dic_fruits = {'りんご':10, 'みかん':5}

key = input('キーを入力してください:')
if key in dic_fruits:
    dic_fruits[key] += 1
else:
    dic_fruits[key] = 1

print(dic_fruits)
    
#結果(keyにみかんを指定した場合)
{'りんご': 10, 'みかん': 6}

#結果(keyにいちごを指定した場合)
{'りんご': 10, 'いちご': 1, 'みかん': 5}

この例では、既に辞書に存在するみかんをキーとして指定すると、みかんの個数が1個増える。

キーが存在していないいちごを指定すると、個数1で辞書に登録される。

setdefault()を使って集計する

dic_fruits = {'りんご':10, 'みかん':1}

key = input('キーを入力してください:')
dic_fruits.setdefault(key, 0)
dic_fruits[key] += 1

print(dic_fruits)

#結果(keyにみかんを指定した場合)
{'りんご': 10, 'みかん': 6}

#結果(keyにいちごを指定した場合)
{'りんご': 10, 'いちご': 1, 'みかん': 5}

setdefault()を使うと、ifもinも使わないでさっきと同じ結果を得ることができる。

以上、setdefault()の使い方について

今回はここまで



辞書は、キーごとの集計に使うのも便利。

キーごとのデータ数をカウントしたり、キーごとの合計を求めたりとか。


0 件のコメント :