文法・環境 組み込み関数 辞書

【python】辞書のリストの検索【getメソッド、filter関数、内包表記】

pythonの辞書のリストの要素を検索する方法を紹介します。

本記事で紹介している「辞書のリスト」とは、下記のような形のものを指しています。

### 辞書のリストの例
list_person = [
    { 'name':'Taro', 'height':170, 'weight':60 },
    { 'name':'Jiro', 'height':180, 'weight':80 },
    { 'name':'Hanako', 'height':160, 'weight':50 }
]

単に、辞書のキーや値を検索する方法については、下記の記事で紹介していますので、参考にしてみてください。

辞書のキー(key)、値(value)を検索、取得する方法

本記事では、下記の内容を紹介しています。

この記事で分かること

■辞書のリストから、キーを検索し、値の一覧を取得

  • 辞書のキーを直接指定する方法
  • getメソッドを用いてキーを指定する方法

■辞書のリストから、キーを検索し、対応する辞書の要素を取得

  • filter関数を使用する方法
  • 内包表記の「if + 条件式」を使用する方法

スポンサーリンク

辞書のリストから、キーを検索し、値の一覧を取得

はじめに、辞書のリストから、キーを検索し、値の一覧を取得する方法について紹介します。

辞書のキーを直接指定する方法

辞書のキーを直接指定して、値の一覧を取得する方法を紹介します。

内包表記で、辞書型の要素を順番に取り出し、キーを指定して値を取り出しています。

### 辞書のリストから、キーを検索し、値の一覧を取得【キー直接指定】
list_person = [
    { 'name':'Taro', 'height':170, 'weight':60 },
    { 'name':'Jiro', 'height':180, 'weight':80 },
    { 'name':'Hanako', 'height':160, 'weight':50 }
]

l_name = [ d['name'] for d in list_person]
print(l_name)
# ['Taro', 'Jiro', 'Hanako']

l_height = [ d['height'] for d in list_person]
print(l_height)
# [170, 180, 160]

l_weight = [ d['weight'] for d in list_person]
print(l_weight)
# [60, 80, 50]

l_age = [ d['age'] for d in list_person]
print(l_age)
# KeyError: 'age'

> l_name = [ d['name'] for d in list_person]

リスト内包表記で記述しています。
list_personから、辞書型の要素を1つずつ取り出し、dに渡しています。
d[ 'name' ] で、キー'name'に対応する値を抽出し、新たなリストを作成しています。

> l_age = [ d['age'] for d in list_person]
> print(l_age)
> KeyError: 'age'

キーを直接指定する方法では、キーが存在しない場合はエラーとなります。

内包表記については、下記の記事で紹介しています。

内包表記の基本的な使い方

getメソッドを用いてキーを指定する方法

先ほどの例では、キーが存在しない場合はエラーとなってしまいます。

辞書の値を検索する際に、辞書のgetメソッドを使用すると、キーが存在しない場合でもエラーにならず、指定したデフォルト値が返されます

なお、デフォルト値は省略可能で、省略した場合はNoneが返されます。

書き方

辞書.get( キー, デフォルト値)

以下、辞書の値を検索する際に、getメソッドを使用したサンプルコードです。

### 辞書のリストから、キーを検索し、値の一覧を取得【getメソッド】
list_person = [
    { 'name':'Taro', 'height':170, 'weight':60 },
    { 'name':'Jiro', 'height':180, 'weight':80 },
    { 'name':'Hanako', 'height':160, 'weight':50 }
]

l_name = [ d.get('name') for d in list_person]
print(l_name)
# ['Taro', 'Jiro', 'Hanako']

l_height = [ d.get('height') for d in list_person]
print(l_height)
# [170, 180, 160]

l_weight = [ d.get('weight') for d in list_person]
print(l_weight)
# [60, 80, 50]

l_age = [ d.get('age') for d in list_person]
print(l_age)
# [None, None, None]

存在しないキー " age " を指定した場合でも、エラーにはならずNoneが返されています。

スポンサーリンク

辞書のリストから、キーを検索し、対応する辞書の要素を取得

つぎに、辞書のリストから、キーを検索し、対応する辞書の要素を取得する方法を紹介します。

filter関数を使用する方法

filter関数と、lambda式を用いて、キーを検索し、対応する辞書の要素を取得する方法を紹介します。

filter関数では、第一引数に関数、第二引数にイテラブルオブジェクトを指定します。

filter関数を用いることで、イテラブルオブジェクト(リスト、タプルなど)から、関数が " True " となる要素を抽出できます。

書き方

filter(関数, イテラブルオブジェクト)

以下、filter関数とlambda式で、検索するキーと値を指定し、対応する辞書の要素を取得するサンプルコードです。

### 辞書のリストから、キーを検索し、対応する辞書を取得 
list_person = [
    { 'name':'Taro', 'height':170, 'weight':60 },
    { 'name':'Jiro', 'height':180, 'weight':80 },
    { 'name':'Hanako', 'height':160, 'weight':50 }
]

print(filter(lambda item : item['name'] == 'Taro', list_person))
# <filter object at 0x0000017C04C5F390>

print(list(filter(lambda item : item['name'] == 'Taro', list_person)))
# [{'name': 'Taro', 'height': 170, 'weight': 60}]

> filter(lambda item : item['name'] == 'Taro', list_person)

filter関数の、関数としてlambda式を指定し、イテラブルオブジェクトとして list_person を指定しています。
list_personの要素である辞書のうち、キー'name'の値が 'Taro'の場合に、lambda式で記述された関数がTrueとなります。

なお、filter関数の返り値はfilterオブジェクトであり、そのままでは確認できないため、list関数でリストに変換して表示しています。

参考までに、辞書からさらにキーを指定して、値を取り出すサンプルコードを紹介します。

### 辞書のリストから、キーを検索し、対応する辞書の要素を取得 
list_person = [
    { 'name':'Taro', 'height':170, 'weight':60 },
    { 'name':'Jiro', 'height':180, 'weight':80 },
    { 'name':'Hanako', 'height':160, 'weight':50 }
]

list_search = list(filter(lambda item : item['name'] == 'Taro', list_person))
dict_search = list_search[0]
print(dict_search['height'])
# 170
print(dict_search['weight'])
# 60

filter関数については、下記の記事で紹介してます。

filter関数の使い方

また、lambda式の使い方については、下記の記事で紹介しています。

lambda(ラムダ)式の使い方

内包表記の「if + 条件式」を使用する方法

内包表記と、「if + 条件式」を用いて、キーを検索し、対応する辞書の要素を取得する方法を紹介します。

内包表記に「if + 条件式」を付与することで、条件式を満たす場合の要素だけで新たなリストが生成されます。

### 辞書のリストから、キーを検索し、対応する辞書を取得 
list_person = [
    { 'name':'Taro', 'height':170, 'weight':60 },
    { 'name':'Jiro', 'height':180, 'weight':80 },
    { 'name':'Hanako', 'height':160, 'weight':50 }
]

list_search = [ item for item in list_person if item['name'] == 'Taro' ]
print(list_search)
# [{'name': 'Taro', 'height': 170, 'weight': 60}]

> list_search = [ item for item in list_person if item['name'] == 'Taro' ]

list_personの要素である辞書を1つずつ取り出し、itemに渡しています。
「if + 条件式」で、キー'name'の値が 'Taro'となる辞書の要素を探しています。

スポンサーリンク

まとめ

pythonの辞書のリストの要素を検索する方法を紹介しました。

単に、辞書のキーや値を取得する方法については下記の記事で紹介していますので、併せて参考にしてみてください。

辞書のキー(key)、値(value)を検索、取得する方法

スポンサーリンク

-文法・環境, 組み込み関数, 辞書
-, ,