65
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

辞書型のリストから、特定のキーの値を取り出したい(Python3)

Last updated at Posted at 2017-10-01

概要

  • Pythonで、辞書型のリストから、特定のキーの値を取り出したい
  • 次項に記述しましたが、限られたケースの実装メモです

具体的には

  • 辞書型のリストから、Key='Name'である要素のKey='Value'の値を取り出したい
  • もう少し正確に記述すると、キーがKeyの値がNameの要素を特定して、キーがValueの値を取り出したい
  • 書くほどに意味不明になりますが、下記の配列から apple を取り出したいということです
  • こんな冗長な保持の仕方しなくても…と思いますが、APIなどのデータ受け渡しの場面では、まああると思います
  • (設計側の気持ちを考えたら理解できます)
[{'Key': 'Name',     'Value': 'apple'},
 {'Key': 'Color',    'Value': 'red'},
 {'Key': 'Quantity', 'Value': 10}]

実装

サンプルソース

list = [{'Key': 'Name',     'Value': 'apple'},
        {'Key': 'Color',    'Value': 'red'},
        {'Key': 'Quantity', 'Value': 10}]

name_values = [x['Value'] for x in list if x['Key'] == 'Name']
name_value = name_values[0] if len(name_values) else ''
print(name_value)

結果

apple

補足

  • 要は辞書型要素配列を走査し、キーがKeyでその値がNameだったら、その要素のキーがValueの値を取り出す、ということです。(日本語のほうが長い)
  • すべての要素が KeyValue というキーを持っている辞書型である、という前提の記述です
  • もっと広く受け入れるのであればキーが存在していることの判定が要りますね
  • (データ受け渡し仕様がある前提であれば例外でキャッチでも良いかなとも思ったりしています)

追記

  • 後から見直したらわかりにくかったので。
def getValue(key, items):
    values = [x['Value'] for x in items if 'Key' in x and 'Value' in x and x['Key'] == key]
    return values[0] if values else None


# 使用例
items = [{'Key': 'Name',     'Value': 'apple'},
         {'Key': 'Color',    'Value': 'red'},
         {'Key': 'Quantity', 'Value': 10}]
print(getValue('Name', items))
# -> apple

print(getValue('Quantity', items))
# -> 10

print(getValue('hoge', items))
# -> None
65
54
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
65
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?