🐍 Python
辞書内包表記で新しい辞書をまとめて作る
辞書内包表記は{キー: 値 for 変数 in イテラブル}という形で、forループを1行に畳んで新しい辞書を作る書き方です。既存のリストや辞書を変換・加工して新しい辞書を作りたい場面でよく使われます。
{key_expr: value_expr for item in iterable}
{key_expr: value_expr for item in iterable if 条件}
nums = [1, 2, 3, 4, 5]
squares = {n: n * n for n in nums}
print(squares)
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# if条件で絞り込む
nums = [1, 2, 3, 4, 5]
evens = {n: n * n for n in nums if n % 2 == 0}
print(evens)
# {2: 4, 4: 16}
# 既存の辞書のキーと値を入れ替える
d = {"a": 1, "b": 2, "c": 3}
swapped = {v: k for k, v in d.items()}
print(swapped)
# {1: 'a', 2: 'b', 3: 'c'}
# リストの各要素から新しい辞書を作る
words = ["apple", "banana", "cherry"]
lengths = {w: len(w) for w in words}
print(lengths)
# {'apple': 5, 'banana': 6, 'cherry': 6}
辞書内包表記の構成要素
- キー式・値式
forの左側にある2つの式。変数そのものだけでなく、len(変数)や変数 * 2のような計算式も書ける- if条件(省略可)
- 末尾に付けると、条件がTrueの要素だけを辞書に含める。elseは使えない(三項演算子で値式側に書く必要がある)
💡 AIコードレビュー観点:キーの重複に注意
辞書内包表記でキーが重複する式を書くと、後から評価された要素で上書きされ、件数が減ります。例えば{w[0]: w for w in ["apple", "avocado", "banana"]}は{'a': 'avocado', 'b': 'banana'}となり、"apple"の情報が消えます。AIが生成したコードでキー式に元データの一部しか使っていない場合、意図せずデータが欠落していないか確認しましょう。複数件を保持したいならキーごとにリストへ集めるsetdefault()のパターンが適しています。