Q1d = {"a": 1, "b": 2} のとき、存在しないキーを取り出してもエラーにならないのはどれですか?
辞書型 (dict) の使い方
Python の辞書型 dict の基本を、宣言・取り出し・更新・存在チェックまで一通り図解で学びます。
辞書を作る
辞書 (dict) はキーと値のペアで値を管理する型です。
リストが「位置(0, 1, 2…)で値を取り出す」箱だったのに対し、辞書は「名前(キー)で値を取り出す」箱と考えるとわかりやすいです。
波括弧 { } で囲み、キー: 値 をカンマ区切りで並べる。
キーが名前、値が中身。キーは重複不可。
# 辞書の宣言
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 件のスコアを並べた順位表」はリスト、「ユーザーごとのスコア」は辞書、という具合です。
同じデータでもどう取り出したいかで選び方が決まります。
値の取り出し — [] と .get()
辞書から値を取り出す方法は2 通りありますが、ポイントは存在しないキーを指定したときの挙動が違うところです。
.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() にデフォルト値を渡す書き方が読みやすく、例外処理(後述)も減ります。
追加・更新・削除
辞書もリストと同じく中身を後から変更できます。
追加・更新・削除は、直接代入で書くのが一番シンプルです。
| やりたいこと | 書き方 | ポイント |
|---|---|---|
| 追加 or 更新 | d["key"] = 値 | キーがあれば更新、無ければ追加 |
| 複数まとめて更新 | d.update(別の辞書) | 重なるキーは上書き、新しいキーは追加 |
| 値を取り出して削除 | v = d.pop("key") | 取り出した値を変数に入れつつ削除。無いキーは KeyError |
| 中身を全部空に | d.clear() | 辞書自体は残り、中身だけ空 |
| 変数ごと消す | del d | d 自体を削除。以降の d 参照はエラー |
同じ書き方でも、キーが無ければ追加、あれば更新。
辞書は「無ければ作る、あれば上書きする」を自動で判断してくれます。
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) # {}
キーと値の一覧 / 存在チェック
最後に、辞書の中身を調べる処理を押さえましょう。
代表的なのは 4 つ — keys() / values() / items() / in 演算子です。
- keys() — キーの一覧を返す(
dict_keys(['brand', 'model', ...])) - values() — 値の一覧を返す
- items() — キーと値のペアの一覧を返す(for 文と組み合わせて使うことが多い)
- "key" in 辞書 — そのキーがあるかを True / 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() はキーと値の両方を同時に取り出せる」という点だけ覚えておきましょう。
この記事では、辞書の宣言、[] と .get() の取り出し方、追加・更新・削除、そしてキー存在チェックと一覧取得を学びました。
辞書はユーザー情報・設定・在庫・集計結果など、実務のあらゆる場所で登場します。キーで引ける箱、というイメージを押さえておけば、この先のデータ処理でも迷わず使えるようになります。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2d = {"a": 1} に対して d["a"] = 2 を実行した後の d はどれですか?
Q3次のうちキー一覧を返すメソッドはどれですか?