はじめに #
Pythonの辞書内包表記を使って、辞書(dict)型の変数を簡潔に作成する例を示す。 Pythonにはリスト型の処理を簡潔に書けるリスト内包表記があるが、辞書型にも同様の内包表記がある。リスト内包表記と合わせて、作成例を示す。
環境: Python 3.5以降
リスト内包表記 #
参考までに、リスト内包表記の例を示す。0から9までの数字を2倍にしたリストを得る。
doubles = [x*2 for x in range(10)]
print(doubles)
実行結果
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
辞書内包表記 #
次に、辞書内包表記の例を示す。0から9までの数字をキー、各キーを2倍にしたものを値とした辞書を得る。
doubles_dict = {x: x*2 for x in range(10)}
print(doubles_dict)
実行結果
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18}
上記の例のように、リスト内包表記の[...]
を{...}
として、コロン:
を使ってキーと値を指定すると、辞書内包表記となる。
辞書内包表記のif #
辞書内包表記で、ある条件を満たす変数のみ抽出する場合は、in
節の後ろにif
節を設ける。
例:0から9までの偶数をキー、各キーを2倍にしたものを値とした辞書を得る。
doubles_dict2 = {x: x*2 for x in range(10) if x%2==0}
print(doubles_dict2)
実行結果
{0: 0, 2: 4, 4: 8, 6: 12, 8: 16}
辞書内包表記のif~else #
辞書内包表記で、条件によって処理を分岐させる場合は、for
節の前に、以下のようにif~else
節を設ける。
(条件がTrueのときの値) if (条件) else (条件がFalseのときの値)
例:0から9までの整数をキーとし、キーが偶数の場合は2倍、キーが奇数の場合は3倍にしたものを値とした辞書を得る。
doubles_dict3 = {x: x*2 if x%2==0 else x*3 for x in range(10)}
print(doubles_dict3)
実行結果
{0: 0, 1: 3, 2: 4, 3: 9, 4: 8, 5: 15, 6: 12, 7: 21, 8: 16, 9: 27}
参考 #
辞書内包表記を使うと、PandasのSeries, DataFrameを簡潔に作成することができます。