どうも。ちょっぴり便利なコードを1000年集め続ける、おたくのフリーレンです。
東大GDSCアドベントカレンダーへの寄稿です
よくないね
辞書型でデータを管理しているとき、こんなコード書いていませんか?
よくないね.py
try:
#keyが存在しなかったらエラーが出る!!!
nanka_tsukau(dictio[key])
except KeyError:
#key無し???(nanka_tsukau()のエラーの可能性も)
nanka_tsukau(0)
要するに、key
がdictio
に登録されているかもしれないし、登録されていないかもしれない。だからkey
がないときのエラーをハンドリングして、0を明示的に記述した方のコードを書く。
こんな面倒なこと、もうやめませんか?
いいね
良いメソッドを紹介しましょう
取得
get(キー)
メソッドが便利です。
キーに対応する値を返すだけでなく、存在しない場合はNone
を返します。エラー出さずに!!!
get使用例.py
dictio = {1: 334, 2:226}
#dictio[1]と同じ
print(dictio.get(1)) #存在するもの
#334
print(dictio.get(1000)) #存在しないもの
#None (エラーなし!)
しかし、みなさんが欲しいのはこっちのはずです。
Noneじゃなくて何か値を出してほしい場合は、get(キー, デフォルト値)
で実現
get使用例.py
dictio = {1: 334, 2:226}
#dictio[1]と同じ
print(dictio.get(1, -1)) #存在するもの
#334
print(dictio.get(1000, -1)) #存在しないもの
#-1 (エラーなし!)
初期化
使うか分かりませんが、 キーがないときだけデフォルト値代入 もあります
その名は setdefault(キー, デフォルト値)
setdefault使用例.py
dictio = {1: 334, 2:226}
#dictio[1]と同じ
dictio.setdefault(1, -1) #存在するもの
print(dictio[1])
#334
dictio.setdefault(1000, -1) #存在しないもの
print(dictio[1000])
#-1 (デフォルト値!エラーなし!)
使用例
種類別数え上げ
種類別に個数を数えるとき、dictionaryを使うこともあるでしょう。
こうすることができます。
数え上げ.py
#数え上げ
for number in numbers_list:
#エラーハンドリングも、`in key`もなく、一行で書ける!!
counter_dictio[number] = counter_dictio.get(number, 0) + 1
のように書けます
最後に
get()
使いましょう
いいね頂けるとなきながら喜びます><