AI資格ドリル
資格を選ぶ↓

用語比較

dict.get()と d[key] の違い|キーが無いときの KeyError と None(Python3基礎)

辞書から値を取り出す方法には d[key] と d.get(key) があり、キーが存在するときはどちらも同じ値を返します。違いが出るのは、キーが存在しないときです。

d[key] は KeyError を起こし、d.get(key) は例外を起こさず None を返します。d.get(key, 既定値) と書けば、None の代わりに指定した値が返ります。

このページは、辞書の読み出しで KeyError が出た人や、get() の戻り値が None になる場面を整理したい人向けです。決まりは、Python 公式ドキュメントの組み込み型(辞書の項)に書かれています。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。

結論

d[key]

キーがあればその値を返す。無ければ KeyError を起こす。

d.get(key, default)

キーがあればその値、無ければ default を返す。default を省略すると None になり、KeyError は起きない。

辞書は変更されない

どちらも読み出しだけで、キーを追加しない。キーが無いときに追加まで行うのは setdefault() の役割。

違いを表で確認

比較軸d[key]d.get(key, default)
キーが無いときd['b']:KeyErrord.get('b'):None、d.get('b', 0):0
キーがあるときd['a']:値を返すd.get('a'):同じ値を返す
辞書の中身d['b']:変わらない(例外で止まる)d.get('b'):変わらない(キーは追加されない)
既定値の指定d[key]:できないd.get(key, default):第 2 引数で指定する

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

KeyError で処理が止まった人

d['b'] はキーが無いと KeyError です。Python 3.9.6 では KeyError: 'b' になりました。キーが無いことがあり得る入力なら get() を使うか、in で先に確かめます。

02

get() の結果が None で、キーが無いのか値が None なのか迷う人

d = {'a': None} のとき、d.get('a') も d.get('b') も None を返し、見分けがつきません。区別が必要なら 'a' in d で調べるか、d.get('b', 既定値) の既定値に値として現れない物を指定します。

03

キーが無いのは異常で、気づきたい人

d[key] を使います。KeyError で止まるので、間違ったキーを黙って通さずに済みます。

具体例で使い分ける

例 1

キーが無いときの三つの書き方

d = {'a': 1} に対して、d['b']、d.get('b')、d.get('b', 0) を実行します。

  • 公式ドキュメントは、d[key] はキーが辞書に無いと KeyError を起こすと定めています。
  • get() は、キーが辞書にあればその値を、無ければ default を返します。default を省略すると None になり、KeyError は起きないと書かれています。

結論: 答えは KeyError、None、0 の順です。Python 3.9.6 で同じ結果を確認しました。実行後も d は {'a': 1} のままです。

例 2

値が None のキーと、キーが無いときの区別

d = {'a': None} に対して、d.get('a', 'x') と d.get('b', 'x') を実行します。

  • 'a' はキーとして存在するので、値の None がそのまま返ります。既定値 'x' は使われません。
  • 'b' はキーが無いので、既定値の 'x' が返ります。

結論: 答えは None と 'x' です。既定値が使われるのは、値が None のときではなく、キーが存在しないときだけです。

問題文から答えを選ぶ手順

  1. 1

    キーが無いことがあり得るかを決める

    必ずあるはずのキーなら d[key]、無いこともある入力なら get() です。

  2. 2

    無いときに何を返したいかを決める

    None でよければ d.get(key)、数値 0 や空リストなど別の値にしたければ第 2 引数に指定します。

  3. 3

    値が None になり得るかを確かめる

    値に None が入り得るなら、get() の結果だけではキーの有無が分かりません。in で確かめます。

試験での見分け方

  • 1d[key] は、キーが無いと KeyError を起こす。
  • 2d.get(key) は、キーが無いと None を返し、KeyError を起こさない。
  • 3d.get(key, default) の default は、キーが存在しないときだけ使われる。
  • 4get() は辞書にキーを追加しない。

誤答しやすい選択肢

get() の既定値は値が None のときも使われると思う

修正: 使われるのはキーが存在しないときだけです。d = {'a': None} で d.get('a', 'x') は None を返します。

get('b', 0) で辞書に 'b': 0 が追加されると思う

修正: get() は読み出しだけで、辞書は変わりません。追加まで行うのは setdefault() です。

get() の None を見て、キーが無いと決めつける

修正: 値が None のキーでも None が返ります。キーの有無は in で確かめます。

確認問題

Q1d = {'a': 1} のとき、d.get('b') の結果は何ですか?

答え: None

キーが無く、default を省略したので None が返ります。KeyError は起きません。

Q2d = {'a': 1} のとき、d['b'] を実行するとどうなりますか?

答え: KeyError

[] で取り出すとき、キーが辞書に無いと KeyError が起きます。

Q3d = {'a': None} のとき、d.get('a', 'x') の結果は何ですか?

答え: None

'a' はキーとして存在するので、既定値は使われず、値の None が返ります。

到達チェック

  • キーが無いときの d[key] と get() の違いを言える
  • get() の第 2 引数が使われる条件を言える
  • 値が None のキーとキーが無いことの見分け方を言える
  • get() が辞書を変更しないと言える

同じ資格で次に知りたいこと

よくある質問

Qget() を使えば KeyError は絶対に起きませんか?

A

公式ドキュメントは、get() は KeyError を起こさないと説明しています。ただし、辞書以外の値が来たなど、別の原因のエラーは防げません。

Qget() の既定値を省略するとどうなりますか?

A

None になります。キーが存在しないときに None が返ります。

Qキーが無いときだけ辞書に追加したいときはどうしますか?

A

setdefault() を使います。キーがあればその値を返し、無ければ既定値を追加してそれを返します。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)