まず結論
get() は、辞書から値を取り出す方法のひとつです。
user = {"name": "モコ"}
print(user.get("name"))
print(user.get("age"))
"name" はあるので "モコ" が返ります。
"age" はないので、エラーではなく None が返ります。
こんなときに読む記事です
次のようなところで止まった人向けです。
user.get("name")の読み方が分からないuser["name"]との違いが分からない- KeyErrorを出さずに値を取りたい
まずは「get() は、なければ空の返事をしてくれる取り出し方」と考えると入りやすいです。
絵で見るなら
辞書を、ラベル付きの引き出し棚だと考えます。
get("name") は、name の引き出しを探します。
引き出しがあれば中身を取り出します。
なければ、棚を壊さずに「見つからなかったよ」という返事をします。
[]で取り出す場合
辞書では、角括弧でも値を取り出せます。
user = {"name": "モコ"}
print(user["name"])
これは「name は必ずあるはず」と思って取り出す書き方です。
ないキーを指定すると、KeyError になります。
user = {"name": "モコ"}
print(user["age"])
"age" がないので、Pythonは止まってエラーを出します。
get()で取り出す場合
get() は、キーがないときもエラーにせず進めます。
user = {"name": "モコ"}
print(user.get("age"))
この場合は None が返ります。
None は「値がない」という印です。
エラーではありません。
代わりの値を決められる
get() では、見つからないときの値を自分で決められます。
user = {"name": "モコ"}
print(user.get("age", "未設定"))
"age" がないので、"未設定" が返ります。
画面に表示するときは、None よりも "未設定" のような言葉のほうが分かりやすいことがあります。
[]とget()の使い分け
最初は、次のように分けると読みやすいです。
必ずあるはずのキー: user["name"]
ないかもしれないキー: user.get("age")
get() は便利ですが、何でも get() にすればよいわけではありません。
必ずあるはずのキーがないなら、エラーで気づいたほうが直しやすいこともあります。
手を動かすミニ練習
次の辞書で、name と level を get() で取り出してみましょう。
user = {"name": "モコ"}
print(user.get("name"))
print(user.get("level", "初心者"))
level は辞書にありません。
そのため、代わりに "初心者" が返ります。
3行まとめ
- get()は辞書からキーの値を取り出す書き方。
- キーがないときもKeyErrorにせず、Noneや指定した値を返せる。
- 必ずあるはずのキーなら[]、ないかもしれないキーならget()と考えると読みやすい。