Pythonで辞書のリストから特定のキーの値のリストを取得
Pythonで共通のキーを持つ辞書を要素とするリストから特定のキーの値のリストを取得する方法を説明する。
共通のキーを持つ辞書を要素とするリストを例にする。
l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20},
{'Name': 'Charlie', 'Age': 30, 'Point': 70}]
source: dict_list_values.py
このような辞書のリストはJSONを読み込むと頻繁に遭遇する。PythonでのJSONの読み書きは以下の記事を参照。
なお、このような辞書のリストはデータ分析ライブラリpandasのpandas.DataFrame
に変換することが可能。もろもろの処理をするのであればpandas.DataFrame
に変換したほうが何かと便利。以下の記事を参照。
スポンサーリンク
リスト内包表記とgetメソッドで任意のキーの値を抽出
リスト内包表記と辞書のget()
メソッドを使う。
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(キー名)
ではなく[キー名]
で値を取得してもいいが、指定したキーを持たない要素が存在する場合にエラーになる。
l_name = [d['Name'] for d in l]
print(l_name)
# ['Alice', 'Bob', 'Charlie']
# l_point = [d['Point'] for d in l]
# KeyError: 'Point'
source: dict_list_values.py
上の例のようにget()
メソッドはデフォルトではキーが存在しないときはNone
を返す。
l_point = [d.get('Point') for d in l]
print(l_point)
# [80, None, 70]
source: dict_list_values.py
第二引数にデフォルト値を指定することが可能。
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
スポンサーリンク