pythonの辞書のリストの要素を検索する方法を紹介します。
本記事で紹介している「辞書のリスト」とは、下記のような形のものを指しています。
### 辞書のリストの例
list_person = [
{ 'name':'Taro', 'height':170, 'weight':60 },
{ 'name':'Jiro', 'height':180, 'weight':80 },
{ 'name':'Hanako', 'height':160, 'weight':50 }
]
単に、辞書のキーや値を検索する方法については、下記の記事で紹介していますので、参考にしてみてください。
本記事では、下記の内容を紹介しています。
この記事で分かること
■辞書のリストから、キーを検索し、値の一覧を取得
- 辞書のキーを直接指定する方法
- 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関数については、下記の記事で紹介してます。
また、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の辞書のリストの要素を検索する方法を紹介しました。
単に、辞書のキーや値を取得する方法については下記の記事で紹介していますので、併せて参考にしてみてください。
スポンサーリンク