Pythonの辞書(dict)に格納されたすべてのデータに対して、順番に処理を行いたい場合、for 文を使用します。
リストのループ処理とは異なり、辞書には「キー」「値」「キーと値のペア」という3つの要素が存在するため、目的に応じてメソッドを使い分ける必要があります。
この記事では、辞書データに対する3種類のループ処理について解説します。
1. キー (Key) をループする
辞書の「キー」だけを順番に取り出したい場合、最も一般的な方法は辞書オブジェクトをそのまま for 文に渡すことです。
構文:
for キー変数 in 辞書:
# 処理
また、.keys() メソッドを使っても同様の結果が得られます。明示的に「キーを処理している」と示したい場合はこちらを使うこともあります。
使用例: 各国の国コード(キー)を表示するプログラムです。
# 国コードと国名の辞書
country_codes = {
"JP": "Japan",
"US": "United States",
"GB": "United Kingdom",
"FR": "France"
}
print("--- 登録されている国コード ---")
# 辞書を直接ループさせると、キーが取り出される
for code in country_codes:
print(f"Code: {code}")
# .keys() を使っても同じ結果になる
# for code in country_codes.keys():
# print(f"Code: {code}")
実行結果:
--- 登録されている国コード ---
Code: JP
Code: US
Code: GB
Code: FR
2. 値 (Value) をループする
辞書の「値」だけを取り出して処理したい場合は、.values() メソッドを使用します。
構文:
for 値変数 in 辞書.values():
# 処理
使用例: 各教科のテストの点数(値)を取り出し、合計点を計算するプログラムです。
# 教科と点数の辞書
test_scores = {
"Math": 85,
"Science": 92,
"History": 78,
"English": 88
}
total_score = 0
print("--- 点数一覧 ---")
# .values() で値だけをループ
for score in test_scores.values():
print(f"{score}点")
total_score += score
print(f"合計点: {total_score}")
実行結果:
--- 点数一覧 ---
85点
92点
78点
88点
合計点: 343
3. キーと値のペア (Item) をループする
「キー」と「値」の両方を同時に取り出して処理したい場合は、.items() メソッドを使用します。 このメソッドは (キー, 値) のタプルを返すため、for 文で変数を2つ指定してアンパック(展開)して受け取ります。
構文:
for キー変数, 値変数 in 辞書.items():
# 処理
使用例: 商品の在庫管理データから、商品名(キー)と在庫数(値)を同時に表示するプログラムです。
# 商品名と在庫数の辞書
inventory = {
"Laptop": 15,
"Mouse": 50,
"Keyboard": 30,
"Monitor": 8
}
print("--- 在庫状況 ---")
# .items() でキーと値を同時に取得
for product, count in inventory.items():
status = "在庫あり" if count > 10 else "残りわずか"
print(f"商品名: {product} | 在庫数: {count} ({status})")
実行結果:
--- 在庫状況 ---
商品名: Laptop | 在庫数: 15 (在庫あり)
商品名: Mouse | 在庫数: 50 (在庫あり)
商品名: Keyboard | 在庫数: 30 (在庫あり)
商品名: Monitor | 在庫数: 8 (残りわずか)
まとめ
辞書のループ処理は、どのデータが必要かに応じて以下の3つを使い分けます。
- キーが必要:
for key in d:(またはd.keys()) - 値が必要:
for value in d.values(): - 両方が必要:
for key, value in d.items():
特に .items() は、キーを使って値を再検索する手間が省けるため、両方のデータを使う場合には最も効率的で読みやすい方法です。
