在python中访问此JSON值的最简洁方法

时间:2017-01-04 15:42:51

标签: python json

{"type":{"value":221,"Name":"Grey"},"value":"40.6"},
{"type":{"value":222,"Name":"Orange"},"value":"40.2"},
{"type":{"value":223,"Name":"Purple"},"value":"12.2"},

访问外部最清洁的方式是什么?#34;价值"来自此特定JSON字典的"40.2" if "Name" == "Orange"

我设法通过迭代来实现这一点,但它变得混乱,所以任何想法如何根据内部花括号内的值获取外部值

2 个答案:

答案 0 :(得分:3)

我假设您有一个词典列表

l = [{"type":{"value":221,"Name":"Grey"},"value":"40.6"},
     {"type":{"value":222,"Name":"Orange"},"value":"40.2"},
     {"type":{"value":223,"Name":"Purple"},"value":"12.2"}]

我们假设许多名称可以是Orange。我们将使用列表推导将其缩减为一个字典列表,其中'Name': 'Orange'从那些

中提取值
values = [d['value'] for d in l if d['type']['Name'] == 'Orange']

答案 1 :(得分:0)

这个答案基于Patrick Haugh的。如果列表中只有一个“橙色”,您可以这样做:

data = [
    {"type": {"value": 221, "Name": "Grey"}, "value": "40.6"},
    {"type": {"value": 222, "Name": "Orange"}, "value": "40.2"},
    {"type": {"value": 223, "Name": "Purple"}, "value": "12.2"}
]
print next((x['value'] for x in data if x['type']['Name'] == 'Orange'), 'not found')

输出:

40.2

表达式(x['value'] for x in data if x['type']['Name'] == 'Orange')与Patrick的解决方案相同,但它是生成器表达式而不是列表推导。不同之处在于生成器表达式更有效:它会在找到目标后立即停止查找,而列表理解将继续搜索直到列表末尾。

next函数采用上面的表达式,得到下一个项目。如果在列表中找不到“Orange”,它将返回第二个参数,即字符串'not found'