Help us understand the problem. What is going on with this article?

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

概要

  • 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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした