Menu
日本語

Python 辞書(dict)の使い方|作成・追加・ループ処理まで

Pythonの辞書(dict)はキーと値で要素を管理するデータ型。基本を覚えるとコードの幅がぐっと広がる、使用頻度トップクラスの必須機能です。

辞書は「キーで引く」データ構造

リストが位置(インデックス)でアクセスするのに対して、Python の辞書(dict)はキーで値を引きます。キーには文字列や数値を使うのが一般的で、それぞれが対応する値にひも付きます。このシンプルな発想の転換だけで、在庫管理、設定ファイル、JSON データ、ユーザープロフィール、キャッシュなど、応用範囲が一気に広がります。

main.py
Output
Click Run to see the output here.

キーと値には、ほぼ何でも入れられます。キーはハッシュ可能である必要があり(数値、文字列、タプルはOK。リストや別の辞書はNG)、値には特に制限はありません。辞書の中に辞書やリストを入れることもできます。

Python 辞書の作り方

作り方はいくつかあって、それぞれ使いどころが違います。

main.py
Output
Click Run to see the output here.

値を取り出す

取り出し方は2通りありますが、どちらを使うかで挙動が変わります。

main.py
Output
Click Run to see the output here.

用途で使い分けましょう。

  • [] を使う場面: そのキーが 絶対に 存在しているはずのとき。もし無ければそれはバグなので、エラーで派手に落ちてくれた方が助かります。
  • .get() を使う場面: 「キーが無いこともある」が正常系のとき。try/except を書かずにデフォルト値を返せます。

要素の追加・更新・削除

キーに値を代入すれば、新規作成も上書きもこれ一つで済みます。

main.py
Output
Click Run to see the output here.

update() は別の辞書やキーと値のペアのイテラブルをマージします:

main.py
Output
Click Run to see the output here.

overridessettings で同じキーがあると、overrides 側で上書きされます。

キーの存在確認

in で調べられるのはキーであって、値ではありません。

main.py
Output
Click Run to see the output here.

値だけをチェックしたいときは、user.values() を使います。

main.py
Output
Click Run to see the output here.

辞書をループで回す方法

python 辞書のループには、次の3つのビューが使えます。

main.py
Output
Click Run to see the output here.

.items() は実戦で一番出番が多い書き方です。キーと値のペアを展開した状態で受け取れるので、そのまま使い始められます。

ループの順序については、Python 3.7 以降なら挿入順が保持されます。辞書は「中身の順番が適当な入れ物」ではありません。abc の順に追加したなら、ループもその順で回ります。これは言語仕様として保証されている挙動なので、安心して頼って大丈夫です。

Python 辞書のソート方法

辞書は挿入順を保つ仕様なので、「辞書をソートする」というのは実質、狙った順番でキーを入れ直した新しい辞書を作るという意味になります。

main.py
Output
Click Run to see the output here.

sorted() はタプルのペアからなるリストを返すので、それを dict(...) で包み直せば、新しい順序の辞書ができあがります。並び替えたペアだけ欲しくて辞書にする必要がなければ、外側の dict() は省いてOKです。

python 辞書を結合する方法

Python 3.9以降では、| 演算子が使えます。

main.py
Output
Click Run to see the output here.

キーが衝突した場合は、後ろ側の辞書の値が優先されます。インプレースで同じことをしたいときは .update() を使いましょう。古いバージョンの Python を使っている場合は {**defaults, **overrides} という書き方で対応できます。

setdefault パターン

実務でよく出てくるのが、「キーがあればその値を使い、なければデフォルト値をセットしてから使う」というパターンです。

main.py
Output
Click Run to see the output here.

より簡単なのは、collections.Counter を使う方法です。

main.py
Output
Click Run to see the output here.

Counterdict のサブクラスで、要素の出現回数を数えるのに特化したクラスです。「何かの登場回数をカウントしたい」と思ったら、まず候補に挙がるのがこれ。

辞書内包表記

リスト内包表記と同じノリで、辞書をサッと作れる書き方です:

main.py
Output
Click Run to see the output here.

ルールはリスト内包表記と同じで、{} の中に key: value を書くだけです。

JSON とそっくりな辞書

Python の辞書は JSON オブジェクトとほぼそのまま対応しています。相互変換もワンライナーで済みます。

main.py
Output
Click Run to see the output here.

Web 開発で辞書をよく見かけるのはこれが理由です。API のリクエストやレスポンスは、結局のところネットワークを挟んだ dict 操作そのものなんです。

実践例:ユーザープロファイル

設定ファイルっぽい感じで、ユーザー情報を管理する小さなプログラムを書いてみましょう。

main.py
Output
Click Run to see the output here.

ネストされた辞書、ミュータブルな値、デフォルト値付きの .get() ——レコード型のデータを扱うときの基本ツールはこれで一通りそろいました。

次のステップ

リスト、タプル、セット、辞書。この4つのコレクションさえ押さえておけば、プログラミング初期に出会うデータのほとんどはモデリングできます。次に学ぶのはリスト内包表記です。あるコレクションを別のコレクションへと変換する、Pythonらしいコンパクトな書き方を見ていきましょう。

よくある質問

Pythonの辞書(dict)とは何ですか?

辞書はキーと値をペアで保持するデータ構造です。リストのように prices[0] と番号で取り出すのではなく、prices['apple'] のようにキーを指定して値を取り出します。読み書きが高速で、キーは重複NG。なお最近のPythonでは、追加した順序がそのまま保持されます。

Pythonの辞書にキーを追加するにはどうすればいい?

単純に代入するだけでOKです。my_dict['new_key'] = 'new value' と書けば、キーが存在しなければ新規追加、すでにあれば値が上書きされます。「追加」と「更新」で構文を使い分ける必要はなく、どちらも同じ書き方です。

dict[key] と dict.get(key) の違いは?

dict[key] はキーが存在しないと KeyError が発生します。一方 dict.get(key) は、キーがなければ None(または指定したデフォルト値)を返します。キーが無いこともあり得る想定なら .get()、無かったらバグという場面では [key] を使う、と覚えておくとよいです。

Coddyでコードを学ぼう

始める