順番に読み進めながら学べます

辞書型 (dict) の使い方

Python の辞書型 dict の基本を、宣言・取り出し・更新・存在チェックまで一通り図解で学びます。

辞書を作る

辞書 (dict) はキーと値のペアで値を管理する型です。

リストが「位置(0, 1, 2…)で値を取り出す」箱だったのに対し、辞書は「名前(キー)で値を取り出す」箱と考えるとわかりやすいです。

辞書の構造
"brand""Toyota""model""Prius""year"2015紐づく紐づく紐づく

波括弧 { } で囲み、キー: 値カンマ区切りで並べる。

キーが名前、が中身。キーは重複不可

# 辞書の宣言
car = {
    "brand": "Toyota",
    "model": "Prius",
    "year": 2015,
}

print(car)            # {'brand': 'Toyota', 'model': 'Prius', 'year': 2015}
print(type(car))      # <class 'dict'>

# キーは文字列以外でも OK(数値もキーにできる)
score_by_id = {1: 80, 2: 95, 3: 72}
print(score_by_id[2]) # 95

リストと辞書の使い分け

順番や並びが意味を持つなら list名前で引きたいなら dict

たとえば「3 件のスコアを並べた順位表」はリスト、「ユーザーごとのスコア」は辞書、という具合です。

同じデータでもどう取り出したいかで選び方が決まります。

ユーザーのプロフィールを辞書で管理してみましょう。

① 次の 3 つのキー・値を持つ user 辞書を作ってください。

- "name": "Alice"

- "age": 28

- "email": "alice@example.com"

user["name"] で名前を、user["age"] で年齢を print() で表示してください。

Python エディタ

コードを実行してください

値の取り出し — [] と .get()

辞書から値を取り出す方法は2 通りありますが、ポイントは存在しないキーを指定したときの挙動が違うところです。

[] と .get() の違い
car["color"](存在しない)[ ]KeyError発生car.get("color").get()None が返る(エラーなし)取り出し無いとき取り出し無いとき

car 辞書から存在しないキー[] で取り出すとどうなるかを確かめてみましょう。

car["brand"]print() で表示してください。

car["color"]print() で表示し、KeyError が起きることを確認してください。

Python エディタ

コードを実行してください

.get()第 2 引数にデフォルト値を渡せるのが便利なポイントです。

「キーが無ければこの値を返してね」を 1 行で書けます。

car = {"brand": "Toyota", "model": "Prius", "year": 2015}

# ① [] で取り出す
print(car["brand"])        # Toyota
# print(car["color"])      # KeyError: 'color'

# ② .get() で取り出す
print(car.get("brand"))          # Toyota
print(car.get("color"))          # None
print(car.get("color", "不明")) # 不明(第 2 引数が返る)

実行し続けたいなら .get()、厳密にしたいなら []

キーが無いのが異常なら [] のほうが早めにエラーで気づけるので安全。

逆に無くても構わない(例: オプションの設定値)なら .get() にデフォルト値を渡す書き方が読みやすく、例外処理(後述)も減ります。

ユーザーの設定辞書 config = {"theme": "dark", "lang": "ja"} が用意されています。

config["theme"] で現在のテーマを取り出して print() で表示してください。

.get() を使って "font_size" を取り出し、設定されていなければ 16 を使う形で表示してください。

Python エディタ

コードを実行してください

追加・更新・削除

辞書もリストと同じく中身を後から変更できます

追加・更新・削除は、直接代入で書くのが一番シンプルです。

やりたいこと書き方ポイント
追加 or 更新d["key"] = 値キーがあれば更新、無ければ追加
複数まとめて更新d.update(別の辞書)重なるキーは上書き、新しいキーは追加
値を取り出して削除v = d.pop("key")取り出した値を変数に入れつつ削除。無いキーは KeyError
中身を全部空にd.clear()辞書自体は残り、中身だけ空
変数ごと消すdel dd 自体を削除。以降の d 参照はエラー
d[key] = 値 の動き
car("color" 無し)car["color"]= "white"追加されるcar("year" 有り)car["year"]= 2024上書きされる代入無いキー代入あるキー

同じ書き方でも、キーが無ければ追加あれば更新

辞書は「無ければ作る、あれば上書きする」を自動で判断してくれます。

car = {"brand": "Toyota", "model": "Prius", "year": 2015}

# 追加(新しいキー)
car["color"] = "white"
print(car)
# {'brand': 'Toyota', 'model': 'Prius', 'year': 2015, 'color': 'white'}

# 更新(既にあるキー)
car["year"] = 2024
print(car["year"])   # 2024

# まとめて更新
car.update({"country": "JP", "model": "Camry"})
print(car["model"])    # Camry(上書きされた)
print(car["country"])  # JP(新しく追加された)

# 取り出して削除
old_year = car.pop("year")
print(old_year)        # 2024
# print(car["year"])   # KeyError(もう無い)

# 全部空に
car.clear()
print(car)             # {}

ユーザー情報の辞書を編集してみましょう。

user = {"name": "Alice", "age": 28} が用意されています。

"age"29 に更新してください。

"email": "alice@example.com" を新しく追加してください。

update() を使って "country": "JP""age": 30 を一度に反映し、最終的な userprint() で表示してください。

Python エディタ

コードを実行してください

キーと値の一覧 / 存在チェック

最後に、辞書の中身を調べる処理を押さえましょう。

代表的なのは 4 つ — keys() / values() / items() / in 演算子です。

  • keys() — キーの一覧を返す(dict_keys(['brand', 'model', ...])
  • values() — 値の一覧を返す
  • items() — キーと値のペアの一覧を返す(for 文と組み合わせて使うことが多い)
  • "key" in 辞書 — そのキーがあるかを True / False で返す
4 つの道具の使い分け
car.keys()キー一覧car.values()値一覧car.items()ペア一覧"key"in carTrue /False

同じ辞書でも、何を取り出したいかで呼び方を変えます。

keys / values / items は一覧、in は True / False を返します。

car = {"brand": "Toyota", "model": "Prius", "year": 2015}

print(car.keys())     # dict_keys(['brand', 'model', 'year'])
print(car.values())   # dict_values(['Toyota', 'Prius', 2015])
print(car.items())    # dict_items([('brand', 'Toyota'), ...])

# キー存在チェック(if と組み合わせるのが定番)
print("brand" in car)  # True
print("color" in car)  # False

if "brand" in car:
    print("メーカー: " + car["brand"])
else:
    print("メーカー情報なし")

for 文と items() の組み合わせ(参考)

辞書の中身を 1 件ずつ処理するときは for key, value in car.items(): の形が定番です。

for 文は後の章で扱うのでここでは詳細に踏み込みませんが、「items() はキーと値の両方を同時に取り出せる」という点だけ覚えておきましょう。

stock = {"apple": 5, "banana": 0, "grape": 12} の在庫表から、指定した果物が在庫表に載っているかを確認し、キーの一覧を表示する処理を書きましょう。

"banana"stock のキーにあるかを in で判定し、結果を print() で表示してください。

② 果物名 target = "lemon" に対して、あれば "{果物名} の在庫: {個数}" を、無ければ "取り扱いなし" を表示してください(if 文のテンプレはコメントにあります)。

stock.keys()キーの一覧だけを取り出し、list() で囲んでから print() で表示してください(果物名一覧として表示)。

Python エディタ

コードを実行してください

この記事では、辞書の宣言[] と .get() の取り出し方追加・更新・削除、そしてキー存在チェックと一覧取得を学びました。

辞書はユーザー情報・設定・在庫・集計結果など、実務のあらゆる場所で登場します。キーで引ける箱、というイメージを押さえておけば、この先のデータ処理でも迷わず使えるようになります。

QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1d = {"a": 1, "b": 2} のとき、存在しないキーを取り出してもエラーにならないのはどれですか?

Q2d = {"a": 1} に対して d["a"] = 2 を実行した後の d はどれですか?

Q3次のうちキー一覧を返すメソッドはどれですか?