Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Python辞典

辞書内包表記

辞書内包表記は1行で辞書を生成できる構文です。リスト内包表記と似た形式で、キーと値の変換・フィルタリングをコンパクトに記述できます。

構文
# 基本的な辞書内包表記
{キー式: 値式 for 変数 in イテラブル}

# 条件付き辞書内包表記
{キー式: 値式 for 変数 in イテラブル if 条件式}

# 既存の辞書から生成する
{キー: 変換(値) for キー, 値 in 辞書.items()}
構文のパターン一覧
パターン概要
{k: v for k, v in items()}辞書の全エントリを別の辞書に変換します。キーや値に任意の式が使えます。
{k: v for k, v in items() if 条件}条件を満たすエントリだけを含む辞書を生成します。
{v: k for k, v in 辞書.items()}キーと値を入れ替えた辞書を生成します。
{x: x**2 for x in range(n)}連番などのイテラブルからキーと値を計算して辞書を生成します。
dict(zip(keys, values))2つのリストをキーと値に対応させて辞書を生成します。
サンプルコード
# 数値の2乗を格納する辞書を生成します。
squares = {x: x**2 for x in range(1, 6)}
print(squares)  # 『{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}』と出力されます。

# 条件付きで偶数だけの辞書を生成します。
even_squares = {x: x**2 for x in range(1, 11) if x % 2 == 0}
print(even_squares)  # 『{2: 4, 4: 16, 6: 36, 8: 64, 10: 100}』と出力されます。

# 既存の辞書の値を変換します(価格を1.1倍に)。
prices = {'apple': 100, 'banana': 80, 'cherry': 200}
taxed = {k: int(v * 1.1) for k, v in prices.items()}
print(taxed)  # 『{'apple': 110, 'banana': 88, 'cherry': 220}』と出力されます。

# キーと値を入れ替えます。
original = {'a': 1, 'b': 2, 'c': 3}
flipped = {v: k for k, v in original.items()}
print(flipped)  # 『{1: 'a', 2: 'b', 3: 'c'}』と出力されます。

# 2つのリストを zip() で組み合わせて辞書を生成します。
names = ['田中', '佐藤', '鈴木']
scores = [85, 92, 78]
result = {name: score for name, score in zip(names, scores)}
print(result)  # 『{'田中': 85, '佐藤': 92, '鈴木': 78}』と出力されます。

# 文字列のリストをキーにして、文字数を値にします。
words = ['python', 'java', 'javascript']
word_lengths = {w: len(w) for w in words}
print(word_lengths)  # 『{'python': 6, 'java': 4, 'javascript': 10}』と出力されます。

# 特定のキーだけを含む辞書を抽出します。
profile = {'name': '山田', 'age': 30, 'city': '東京', 'job': 'エンジニア'}
allowed_keys = {'name', 'city'}
filtered = {k: v for k, v in profile.items() if k in allowed_keys}
print(filtered)  # 『{'name': '山田', 'city': '東京'}』と出力されます。
概要

辞書内包表記はPythonの強力な機能の一つで、ループと条件式を組み合わせて辞書を1行で生成できます。通常の for ループで辞書を構築するコードと比べて簡潔で読みやすく、Pythonic(Pythonらしい)な書き方とされています。

キーと値の両方に任意の式を使えるため、既存の辞書の変換・フィルタリング・逆引き辞書の生成など様々な場面で活用できます。キーが重複する可能性がある場合は後から処理されたものが優先されます。またキーにはハッシュ可能なオブジェクト(文字列・数値・タプルなど)しか使えず、リストは使えません。

辞書のコピーやマージは『辞書.copy() / dict() / 辞書のマージ』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。