🔖

Pythonのdict.get()と[ ]の違いと使い分け

に公開

はじめに

Pythonで辞書(dict)から値を取り出すとき、
次の2つの書き方があります。

value = my_dict['key']
value = my_dict.get('key')

最初は、どちらも同じではないかと思うかもしれません。
しかし実際は、エラーの起き方や挙動に違いがあります

本記事では、dict.get()[] の違いと使い分けについて解説します。

[](キーアクセス)の特徴

value = my_dict['key']

指定したキーが辞書に存在すれば値を返します
存在しないキーを指定すると、KeyError というエラーが発生します

例:

my_dict = {'apple': 100} # key: 果物名, value: 値段

print(my_dict['apple'])  # → 100
print(my_dict['banana']) # → KeyError発生

エラーでプログラムが止まります。

get() の特徴

value = my_dict.get('key')

指定したキーが存在すれば値を返します
存在しない場合は、 None を返します(エラーになりません)

例:

my_dict = {'apple': 100} # key: 果物名, value: 値段

print(my_dict.get('apple'))   # → 100
print(my_dict.get('banana'))  # → None

エラーは発生しません。代わりに None が返ります。

さらに、第2引数にデフォルト値を指定することもできます。

price = my_dict.get('banana', 0)
print(price)  # → 0

キーがないとき、「0」を返すようにできます。

使い分け

場面によって使い分けることがポイントです。

書き方 特徴 向いている場面
my_dict['key'] 存在しないと KeyError キーが必ず存在する前提の場合
my_dict.get() 存在しないと None or デフォルト値 キーが存在しない可能性がある場合

具体例:get()が役立つ場面

例えば、辞書から商品の在庫を確認するプログラムがあったとします。

stock = {'apple': 10, 'banana': 5} # key: 果物名, value: 在庫数

item = 'orange'
quantity = stock.get(item, 0)

print(f"{item} の在庫は {quantity} 個です")

出力:

orange の在庫は 0 個です

get() を使うことで「キーがないとき0を返す」処理が書けます。
[] で書くと KeyError で止まってしまいます。

おわりに

辞書(dict)から値を取り出すとき、
「キーがない場合どうするか」 を意識することで、
エラーを回避し、意図した挙動を実現できます。

普段のコーディングでは、「キーが存在しない可能性がある」場合は get() を使う習慣をつけておくと安心です。

本記事が参考になれば幸いです。

Discussion