Pythonの辞書(dict)オブジェクトからキーと値のペアのサブセットを抽出する方法
辞書内包表記を使ったサブセット抽出の基本
Pythonで辞書オブジェクトから特定の条件に合うキーと値のペアだけを取り出したい場合は、辞書内包表記(dictionary comprehension)を使うのが最もシンプルで効率的な方法です。
ここでは、学生の名前と点数(パーセンテージ)を格納した辞書を例に説明します。
>>> marks = {
'Ravi': 45.23,
'Amar': 62.78,
'Ishan': 20.55,
'Hema': 67.20,
'Balu': 90.75
}条件を指定して抽出する例
たとえば、50%以上の点数を取った学生だけの名前と点数からなる辞書を作りたい場合は、次のように if 条件付きの辞書内包表記を記述します。
>>> passed = { key:value for key, value in marks.items() if value > 50 }
>>> passed
{'Amar': 62.78, 'Hema': 67.2, 'Balu': 90.75}marks.items() がすべてのキーと値のペアを順番に返し、そのうち value > 50 を満たす要素だけが新しい辞書 passed に格納されます。このように、1行のコードで条件に合うサブセットを簡単に作成できます。
特定のキーだけを抽出する例
条件式ではなく、あらかじめ決めた名前のリスト(集合)に含まれる学生だけを抽出したい場合も同様です。キーがその集合に含まれているかどうかを in 演算子で判定します。
>>> names = { 'Amar', 'Hema', 'Balu' }
>>> lst = { key:value for key,value in marks.items() if key in names}
>>> lst
{'Amar': 62.78, 'Hema': 67.2, 'Balu': 90.75}まとめ
辞書内包表記を使えば、値の条件による絞り込みでも、キーのリストによる選択でも、簡潔かつ可読性の高いコードで辞書のサブセットを抽出できます。大量のデータを扱う場合にもパフォーマンスが良く、Pythonらしいイディオムとして広く使われているテクニックなので、ぜひ覚えておきましょう。
-
Pythonで辞書の中に辞書を定義する方法(ネスト構造の作り方)
ネストした辞書とはPythonの辞書(dict)オブジェクトはミュータブル(変更可能)です。この特性により、ある辞書オブジェクトを別の辞書の「値」として格納することができます。つまり、キーに関連付けられた値として別の辞書を定義することで、ネストした(入れ子になった)辞書を作成できるのです。ネストした辞書の定義例以下の例では、学生ごとの情報(名前・年齢・科目・GPA)を、それぞれ独立した辞書として保持し、それらを外側の辞書の値にしています。>>> students = { student1: {name: Raaj, age: 23, subjects: [Phy, C
-
Pythonの辞書からキーを削除する方法を解説!del文・pop()・popitem()の使い分け
はじめに Pythonの辞書(dict)は、キーと値のペアでデータを管理できる非常に便利なデータ構造です。プログラムの実行中に不要になった要素を削除したい場面は多くありますが、Pythonにはいくつかの削除方法が用意されています。 この記事では、代表的な削除方法であるdel文とpop()メソッドを中心に、それぞれの特徴や使い分けのポイントを実行例とともにわかりやすく解説します。 del文でキーを削除する Pythonのdelキーワードは、ほぼすべてのオブジェクトに対して使用できます。辞書から特定の要素を削除する場合は、delステートメントにキーを指定します。 >>> D1