Python - 辞書(dict)のforループ

辞書をループ処理する方法は主に3つあり、キーだけを取り出す方法、値だけを取り出す方法、そしてキーと値の両方を取り出す方法です。

# キーのみ
for key in <辞書オブジェクト>:
    print(key)

# 値のみ
for value in <辞書オブジェクト>.values():
    print(key)

# キーと値
for key, value in <辞書オブジェクト>.items():
    print(f'{key}={value}')

キーのループ処理

キーのみをループで取得する場合、for 文に 辞書オブジェクトをそのまま渡します。
for key in <辞書オブジェクト>:
    print(key)
また、次のように keys()メソッド や、iter()関数 を使用しても同じ結果が得られます。
# for + keys()メソッド
for key in <辞書オブジェクト>.keys():
    print(key)
# for + iter()関数
for key in iter(<辞書オブジェクト>):
    print(key)

サンプルプログラム

次のサンプルコードは for を使用し、dict(辞書)のキーを全て表示しています。
weekDict = {'Monday': '月曜日',
            'Tuesday': '火曜日',
            'Wednesday': '水曜日',
            'Thursday': '木曜日',
            'Friday': '金曜日',
            'Saturday': '土曜日',
            'Sunday': '日曜日'}

# for ループでキーを取得
for key in weekDict:
    print(key)
サンプルコードの実行結果
サンプルコードの実行結果

値のループ処理

値のループ処理には、辞書の values()メソッド を使用します。values()メソッド は 値を含む ビューオブジェクト を返します。ビューオブジェクト は リスト のようなもので、値を順番に取り出すことができます。
for value in <辞書オブジェクト>.values():
    print(value)

サンプルプログラム

次のサンプルコードは for と items()メソッド を使用し、dict(辞書)の値を全て表示しています。
weekDict = {'Monday': '月曜日',
            'Tuesday': '火曜日',
            'Wednesday': '水曜日',
            'Thursday': '木曜日',
            'Friday': '金曜日',
            'Saturday': '土曜日',
            'Sunday': '日曜日'}

# for ループで値を取得
for value in weekDict.values():
    print(value)
サンプルコードの実行結果
サンプルコードの実行結果

キーと値のループ処理

キーと値を同時に取り出すには、辞書の items()メソッド を使用します。items()メソッド は キーと値をペアとしたタプルを扱う ビューオブジェクト を返します。ビューオブジェクト は リスト のようなもので、キーと値を含むタプルオブジェクト を順番に取り出すことができます。
for key, value in <辞書オブジェクト>.items():
    print(f'{key}={value}')

サンプルプログラム

次のサンプルコードは items()メソッド を使用し、dict(辞書)の内容を全て表示しています。
# ループ処理したい辞書(dict)
weekDict = {'Monday': '月曜日',
            'Tuesday': '火曜日',
            'Wednesday': '水曜日',
            'Thursday': '木曜日',
            'Friday': '金曜日',
            'Saturday': '土曜日',
            'Sunday': '日曜日'}

# for ループ + items()メソッドでキーと値を取得
for key, value in weekDict.items():
    print(f'{key}={value}')
サンプルコードの実行結果
サンプルコードの実行結果

for で キーと値 が取り出される順番について

Pythonバージョン3.7 から、キーが追加された順番に取得されることが保証されるようになりました。それ以前のバージョンでは取得順は不定で、同じソースコードでも実行環境により結果が変わる可能性があります。Pythonのバージョンを確認するには、次の記事を参照してください。

for ループの順序を逆転させる

組み込み関数 reversed() を使用します。reversed は 要素を逆順に取り出す イテレータ を返します。 辞書で reversed() 関数を使用するには、Pythonバージョン3.8以降が必要です。
# キーを逆順に取得
for key in reversed(weekDict):
    print(key)

# 値を逆順に取得
for value in reversed(weekDict.values()):
    print(value)

# キーと値を逆順に取得
for key, value in reversed(weekDict.items()):
    print(f'{key}={value}')

組み込み関数 reversed() の詳細は次の記事を参照してください。

サンプルコードの実行結果
サンプルコードの実行結果

for ループでの注意事項

for ループ内で要素の追加や削除を行うとエラーが発生します。

次のサンプルコードはループ中に要素を削除しようとしていますが、エラーが発生します。

# ループ中に要素を削除
for key in weekDict:
    # RuntimeError: dictionary changed size during iteration
    del weekDict[key]
サンプルコードの実行結果
サンプルコードの実行結果

サンプルコードのダウンロード

ダウンロードリンク

参考資料

検証環境