Pythonの辞書内包表記(dictionary comprehension)の使い方について解説します。
Contents
辞書内包表記(dictionary comprehension)
Pythonにおける辞書内包表記(dictionary comprehension)は、既存のリストや辞書などのイテラブルなオブジェクトから新たな辞書を作成する際にシンプルに記載するための定義方法です。
この記事では、辞書内包表記の基本的な使い方について紹介します。
辞書内包表記の使い方
辞書内包表記の構文は以下になります。
{キー: 値 for 仮変数 in イテラブルなオブジェクト if 条件}
上記の意味合いとしては、イテラブルなオブジェクトから要素を順番に仮変数に取得し、条件に一致するものを使って、キーと値を持つ辞書を作るということになります。
既存リストから辞書を作成する場合
既存のリストから辞書内包表記を使って辞書を作成する場合は以下のようにします。
# キーと値のそれぞれのリストから辞書を作成する例 keys = ["k1", "k2", "k3", "k4", "k5"] values = [10, 20, 30, 40, 50] data = {k: v for k, v in zip(keys, values) if v >= 30} print(f"data: {data}")
【実行結果】 data: {'k3': 30, 'k4': 40, 'k5': 50}
上記例では、keys
とvalues
というキーと値のそれぞれのリストが既に用意されている状況で辞書を作成する例です。keys
とvalues
から順にk
、v
に値を取り出し、値v
が30
以上のものを使って辞書を作成しています。
複数リストからまとめて値を取り出す際にはzip
を使用しています。zip
については「zipを用いたfor文の使い方」を参考にしてください。
既存リストから辞書内包表記を使用しないで記載する場合
辞書内包表記は、通常のfor
文で書き換えることが可能です。
# キーと値のそれぞれのリストから辞書を作成する例 keys = ["k1", "k2", "k3", "k4", "k5"] values = [10, 20, 30, 40, 50] # 内包表記を使わない場合 data = {} for k, v in zip(keys, values): if v >= 30: data[k] = v print(f"data: {data}")
既存の辞書から新しい辞書を作成する場合
既存の辞書から辞書内包表記を使って辞書を作成する場合は以下のようにします。
# 辞書から新しい辞書を作成する例 d = {"k1": 10, "k2": 15, "k3": 20, "k4": 25, "k5": 30} data = {k: v for k, v in d.items() if v % 2 == 0} print(f"data: {data}")
【実行結果】 data: {'k1': 10, 'k3': 20, 'k5': 30}
上記例では、既存辞書から順番に値を取り出し、偶数の要素を取り出して新しい辞書を作成しています。items
メソッドを使用して順にk
、v
に値を取り出し、2で割り切れる要素を使って辞書を作成しています。
辞書のitems
メソッドについては「辞書(dict)の内容を列挙して扱う方法」を参考にしてください。
既存の辞書から辞書内包表記を使用しないで記載する場合
辞書内包表記は、通常のfor
文で書き換えることが可能です。
# 辞書から新しい辞書を作成する例 d = {"k1": 10, "k2": 15, "k3": 20, "k4": 25, "k5": 30} # 内包表記を使わない場合 data = {} for k, v in d.items(): if v % 2 == 0: data[k] = v print(f"data: {data}")
辞書内包表記の特徴と注意点
辞書内包表記は、処理をシンプルに記述できる点が特徴です。また、辞書内包表記は、Python内部で最適化されているため、一般的に実行速度も速くなります。処理速度は状況によって異なり、必ずしも常に早いとは限らないため、その点には注意が必要です。
また、辞書内包表記がコードを複雑にする場合には、使用を慎重に検討してください。特にチーム開発では、ソースコードの可読性が重要ですので、シンプルさと可読性のバランスを保つことが重要です。
まとめ
Pythonの辞書内包表記(dictionary comprehension)の使い方について解説しました。
辞書内包表記は、イテラブルなオブジェクトから新たな辞書を作成する際にシンプルに記載するための定義方法です。この記事では、辞書内包表記の基本的な使い方や特徴と注意点を紹介しました。
Pythonにおける内包表記は他にも「リスト内包表記」「集合内包表記」「ジェネレータ内包表記」といったものがあります。内包表記については「内包表記(まとめ)」を参考にしてください。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。