Pythonで辞書のリストから特定のキーの値のリストを取得
Pythonで共通のキーを持つ辞書を要素とするリストから特定のキーの値のリストを取得する方法を説明する。
共通のキーを持つ辞書のリストはJSONを読み込むと頻繁に遭遇する。PythonでのJSONの読み書きは以下の記事を参照。
また、このような辞書のリストはデータ分析ライブラリpandasのpandas.DataFrame
に変換できる。もろもろの処理をするのであればpandas.DataFrame
に変換すると何かと便利。
リスト内包表記とgetメソッドで任意のキーの値を抽出
リスト内包表記と辞書のget()
メソッドを使う。
l = [
{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20},
{'Name': 'Charlie', 'Age': 30, 'Point': 70},
]
l_name = [d.get('Name') for d in l]
print(l_name)
# ['Alice', 'Bob', 'Charlie']
l_age = [d.get('Age') for d in l]
print(l_age)
# [40, 20, 30]
l_point = [d.get('Point') for d in l]
print(l_point)
# [80, None, 70]
source: dict_list_values.py
リスト内包表記、get()
についてはそれぞれ以下の記事を参照。
共通のキーを持たない要素がある場合
指定したキーを持たない要素が存在する場合、get()
メソッドはデフォルトではNone
を返す。
l = [
{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20},
{'Name': 'Charlie', 'Age': 30, 'Point': 70},
]
l_point = [d.get('Point') for d in l]
print(l_point)
# [80, None, 70]
source: dict_list_values.py
get()
メソッドの第二引数に存在しない場合のデフォルト値を指定できる。
l_point_default = [d.get('Point', 0) for d in l]
print(l_point_default)
# [80, 0, 70]
source: dict_list_values.py
キーが存在しない要素を除外したい場合はリスト内包表記にif
で条件を追加する。
l_point_ignore = [d.get('Point') for d in l if d.get('Point')]
print(l_point_ignore)
# [80, 70]
source: dict_list_values.py
Python3.8で導入された代入式(セイウチ演算子、ウォルラス演算子):=
を使うと、get()
の繰り返しを避けることができる。
l_point_ignore_walrus = [v for d in l if (v := d.get('Point'))]
print(l_point_ignore_walrus)
# [80, 70]
source: dict_list_values.py