Menu

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

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

このページのコードはエディタで実行できます — 編集してすぐに結果を確認できます。

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

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

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

Python 辞書の作り方

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

値を取り出す

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

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

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

要素の追加・更新・削除

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

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

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

キーの存在確認

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

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

辞書をループで回す方法

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

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

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

Python 辞書のソート方法

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

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

python 辞書を結合する方法

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

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

setdefault パターン

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

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

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

辞書内包表記

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

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

JSON とそっくりな辞書

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

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

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

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

ネストされた辞書、ミュータブルな値、デフォルト値付きの .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 programming languages illustration

Coddyでコードを学ぼう

始める