LoginSignup
1
0

【Python】dictionaryを使う前に、超便利メソッドを知ってくれ!エラーハンドリングはもうしなくていい!

Last updated at Posted at 2023-11-27

どうも。ちょっぴり便利なコードを1000年集め続ける、おたくのフリーレンです。
東大GDSCアドベントカレンダーへの寄稿です

よくないね

辞書型でデータを管理しているとき、こんなコード書いていませんか?

よくないね.py
try:
    #keyが存在しなかったらエラーが出る!!!
    nanka_tsukau(dictio[key])
except KeyError:
    #key無し???(nanka_tsukau()のエラーの可能性も)
    nanka_tsukau(0)

要するに、keydictioに登録されているかもしれないし、登録されていないかもしれない。だから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()使いましょう

いいね頂けるとなきながら喜びます><

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0