概要
- 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
の値を取り出す、ということです。(日本語のほうが長い) - すべての要素が
Key
とValue
というキーを持っている辞書型である、という前提の記述です - もっと広く受け入れるのであればキーが存在していることの判定が要りますね
- (データ受け渡し仕様がある前提であれば例外でキャッチでも良いかなとも思ったりしています)
追記
- 後から見直したらわかりにくかったので。
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