用語比較
辞書の d[key] と d.get(key) の違い(KeyError の扱い)
辞書の d[key] と d.get(key) の違いは、キーが存在しないときの動きです。d[key] は KeyError を発生させ、d.get(key) は None を返します。キーが必ずある前提なら d[key]、無いかもしれないなら d.get(key)と使い分けます。
Python 3 エンジニア認定基礎試験は、オライリー・ジャパン「Pythonチュートリアル」の掲載内容を出題範囲とし、第5章データ構造は40問中7問(17.5%)です(2026-10-15確認)。公式チュートリアルの辞書型の節は、存在しないキーを d[key] で取り出すと KeyError になること、それを避けるために get() メソッドを使えることを述べています。
このページは、辞書のキーが無いときに何が起こるか選択肢で迷う人と、get() の第2引数の役割を整理したい人を対象にしています。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
- 公式一次資料と照合した内容
- 存在しないキーを d[key] で取り出すと KeyError になること、get() が None または指定した既定値を返すことは、Python公式チュートリアル5.5を、出題範囲と第5章の出題数はPythonエンジニア育成推進協会の試験案内を2026-10-15に照合しています。コード例の出力はPython 3.9で実際に実行して確かめています。
- 編集部が学習用に整理した内容
- キーの有無と書き方から結果を選ぶ手順は編集部の学習上の整理です。
資格ごとの公式資料の一覧
結論
公式一次資料と照合:用語の定義は公式一次資料と照合しています。
d[key]
キーが存在すれば値を返し、存在しなければ KeyError を発生させる。
d.get(key)
キーが存在すれば値を返し、存在しなければ None を返す。第2引数に既定値を渡すと、None の代わりにその値を返す。
違いを表で確認
| 比較軸 | d[key] | d.get(key) |
|---|---|---|
| キーが存在するとき | 値を返す | 値を返す(d[key] と同じ) |
| キーが存在しないとき | KeyError が発生する | None を返す。例外は発生しない |
| 既定値の指定 | できない | d.get(key, 0) のように第2引数で指定できる |
| 辞書の中身 | 参照するだけで辞書は変わらない | 参照するだけで辞書は変わらない(存在しないキーも追加されない) |
| 選択肢で探す語 | KeyError、例外、インデックス指定 | None、既定値、デフォルト値、例外を避ける |
公式一次資料と照合:Python3エンジニア認定基礎試験: 2026-09-18に一次資料で確認一次資料の一覧を見る →
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
存在しないキーを指定したときの結果を、選択肢から選べない人
d[key] なら KeyError、d.get(key) なら None です。選択肢に「None が返る」と「KeyError が発生する」が並んでいるときは、書き方が角かっこかメソッド呼び出しかを先に確認します。
get() の第2引数の意味があいまいな人
第2引数は、キーが存在しないときに返す値です。d.get("grape", 0) は、"grape" が無ければ 0 を返します。キーが存在するときは、第2引数は使われず、辞書の値が返ります。
get() を使うと辞書にキーが追加されると考える人
get() は参照だけで、辞書を変更しません。実行確認でも、存在しないキーを get() で参照したあとの辞書は元のままでした。キーを追加する操作とは別です。
具体例で使い分ける
編集部の整理
例 1
存在するキーと存在しないキーを、2つの書き方で参照する
d = {"apple": 3, "banana": 5} に対して、d["apple"]、d.get("apple")、d.get("grape")、d.get("grape", 0) を実行する場面です。
- Python 3.9 で実際に実行すると、d["apple"] と d.get("apple") はどちらも 3 を返しました。
- d.get("grape") は None、d.get("grape", 0) は 0 を返しました。
- get() を実行したあとも、d は {'apple': 3, 'banana': 5} のままでした。
結論: キーがあるときは同じ結果で、キーが無いときだけ None または指定した既定値になります。
例 2
存在しないキーを d[key] で参照する
同じ辞書 d に対して d["grape"] を実行する場面です。
- 実際に実行すると、KeyError: 'grape' が発生しました。
- 公式チュートリアルは、このエラーを避けたいときに get() メソッドを使うと述べています。
- try 文で KeyError を受け取る書き方もありますが、「例外を避ける」という語が選択肢にあれば get() です。
結論: d[key] は存在しないキーで KeyError になります。
例 3
値が None のキーと、キーが無い場合の見分け方
x = {"a": None} に対して、x.get("a") と x.get("b") を比べる場面です。
- 実際に実行すると、x.get("a") も x.get("b") も None を返し、結果だけでは区別できませんでした。
- x.get("a", "既定") は None を返し、x.get("b", "既定") は "既定" を返しました。
- キーが存在するかどうかは、"a" in x が True になることで確認できます。
結論: get() の戻り値が None でも、キーが無いとは限りません。区別したいときは in 演算子を使います。
問題文から答えを選ぶ手順
編集部の整理:キーの有無と書き方から結果を選ぶ手順は編集部の学習上の整理です。
- 1
書き方を見る
d[key] なら角かっこ、d.get(key) ならメソッド呼び出しです。
- 2
キーが存在するかを確認する
存在するなら、どちらも同じ値を返します。違いが出るのは存在しない場合です。
- 3
存在しないときの結果を選ぶ
角かっこなら KeyError、get() なら None(第2引数があればその値)です。
- 4
戻り値が None の意味を確認する
None が返っても、キーが存在して値が None の場合があります。区別が必要なら in 演算子を使います。
試験での見分け方
編集部の整理
- 1d[key] は、キーが存在しないと KeyError になる。
- 2d.get(key) は、キーが存在しないと None を返し、例外にならない。
- 3d.get(key, 既定値) は、キーが存在しないときに既定値を返す。
- 4get() は辞書を変更せず、存在しないキーを追加しない。
- 5get() が None を返すだけでは、キーの有無は判断できない。
誤答しやすい選択肢
get() も存在しないキーで KeyError になると考える
修正: get() は例外を出さず、None または既定値を返します。
d[key] が存在しないキーで None を返すと考える
修正: d[key] は KeyError です。None を返すのは get() です。
get() の第2引数を、存在するキーにも使われる値と考える
修正: 第2引数は、キーが存在しないときだけ返される値です。
get() が None を返したら、キーは無いと決めつける
修正: 値が None のキーもあります。キーの有無は in 演算子で確かめます。
確認問題
Q1d = {"a": 1} のとき、d["b"] を実行するとどうなる?
答え: KeyError が発生する
存在しないキーを角かっこで取り出すと KeyError になります。
Q2d = {"a": 1} のとき、d.get("b", 0) の結果は?
答え: 0
キー "b" が存在しないので、第2引数の既定値 0 が返ります。
Q3d = {"a": 1} のとき、d.get("a", 0) の結果は?
答え: 1
キー "a" が存在するので、辞書の値 1 が返り、第2引数は使われません。
到達チェック
- 存在しないキーを d[key] で参照したときの結果を言える
- d.get(key) が存在しないキーで返す値を言える
- get() の第2引数の役割を説明できる
- get() が辞書を変更しないことを説明できる
- 値が None のキーと、キーが無い場合を in 演算子で区別できる
関連ページで確認する
同じ資格で次に知りたいこと
- ジェネレータとリストの違い(メモリと遅延評価)
ジェネレータ(式)とリストの違いを、値を作るタイミング、メモリ、一度しか使えない点、len()が使えない点、Python 3 エンジニア認定基礎試験での読み取り手順と確認問題まで整理します。
- read()・readline()・readlines()の違い(ファイルの読み方)
read()・readline()・readlines()の違いを、戻り値の型、読む範囲、ファイル末尾での結果、Python 3.9 で実際に実行した出力、Python3エンジニア認定基礎試験での判断手順と確認問題まで解説します。
- break・continue・ループのelse節の違い(ループの途中終了と飛ばし)
Pythonのbreak、continue、ループのelse節の違いを、動き、else節が実行される条件、公式チュートリアル4.4と4.5の記述から実行結果つきで比較します。Python3エンジニア認定基礎試験での見分け方と確認問題も示します。
よくある質問
Qd[key] と d.get(key) の一番短い違いは?
キーが存在しないとき、d[key] は KeyError、d.get(key) は None を返します。
Qget() の第2引数は何ですか?
キーが存在しないときに返す既定値です。省略すると None が返ります。
Qget() で辞書にキーが追加されますか?
追加されません。get() は参照だけで、辞書を変更しません。
QPython3エンジニア認定基礎試験の範囲ですか?
出題範囲はPythonチュートリアルで、第5章データ構造が40問中7問です(2026-10-15確認)。公式チュートリアルの辞書型の節に、KeyError と get() の説明があります。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
