Python: 辞書内包表記とは、使い方

辞書内包表記とは、 辞書やリストなどのイテラブルなオブジェクトの内容を元に、 新しい辞書(ディクショナリ)を作成するための特殊な表記方法です。
辞書内包表記は Dict comprehensionとも呼ばれ、 英単語の comprehension には「内包」や「包含」の意味があります。

Pythonの内包表記では辞書(ディクショナリ)以外にもリスト内包表記や 集合内包表記があります。(タプルは内包表記がありません)。

ここでは辞書内包表記の書式や具体的な書き方を紹介します。

辞書内包表記の書式

書式
{キー:値 for 変数(キー), 変数(値) in イテラブルなオブジェクト (if 条件)}

ディクショナリ(辞書)をループさせる場合によく使う 「for 変数(キー), 変数(値) in イテラブルなオブジェクト」という表記の前後に、 「キー:値」や「if 条件」が加わっています。 全体は波括弧{}で括り、「if 条件」は省略可能です。

辞書内包表記の使い方

実際に辞書内包表記を使ってみます。

辞書の各要素を2倍にした新しい辞書を作成する

次のサンプルコードでは、 辞書 dを基に、要素値を2倍にした新しい辞書 new_d を作成しています。 キー用の変数が kで、値用の変数が vです。

d = {"a": 10, "b": 20, "c": 30}

new_d = {k: v * 2 for k, v in d.items()}

print(new_d) # {'a': 20, 'b': 40, 'c': 60}

上のコードを辞書内包表記を使わずに書くとしたら次のような コードになります。

d = {"a": 10, "b": 20, "c": 30}
new_d = {}

for k, v in d.items():
	new_d[k] = v * 2

print(new_d) # {'a': 20, 'b': 40, 'c': 60}

辞書のキーと値を入れ替える

キーと値を入れ替える場合は、forの前に書く変数の順番を入れ替えて 「変数(値):変数(キー)」と記述するだけです。

d = {"a": "red", "b": "blue", "c": "yellow"}

new_d = {v:k for k, v in d.items()}

print(new_d) # {'red': 'a', 'blue': 'b', 'yellow': 'c'}

「if 条件」を使って新しい辞書を作成する

「if 条件」を使った場合の例です。 次のコードでは辞書 dの要素値が、 偶数の場合だけ新しい辞書 new_dの要素になります。

d = {"a": 1, "b": 2, "c": 3, "d": 4}

new_d = {k:v for k, v in d.items() if v % 2 == 0}

print(new_d) # {'b': 2, 'd': 4}
Python