查找Json Array - Python中Key的值



我有一个Json数组,其中有键值对。我想要得到列表中某个键的值。我不知道键在数组中的位置,所以我不能在数组中使用索引。

请问我怎么拿到这个?我尝试过下面的代码来获得'filterB'的值,这是'val1',但没有运气。谢谢。

import json
x = '{"filters":[{"filterA":"All"},{"filterB":"val1"}]}'
y = json.loads(x)
w = y['filters']['filterB']
print (w)

w = y['filters']['filterB']不工作,因为y['filters']list而不是dict

你的问题的答案取决于你想如何处理filters列表中有filterB键的多个字典的情况。

import json
x = '{"filters":[{"filterA":"All"},{"filterB":"val1"}]}'
y = json.loads(x)
# all filterB values
filter_b_values = [x['filterB'] for x in y['filters'] if 'filterB' in x.keys()] 
# take first filterB value or None if no values
w = filter_b_values[0] if filter_b_values else None

您的数据(json)的来源与您想要的无关,这是在y['filters']中找到包含一个名为filterB的键的字典。要做到这一点,您需要遍历列表并查找满足此条件的项。

w = None
for item in y['filters']:
if 'filterB' in item:
w = item['filterB']
break
print(w) # val1

或者,您可以将所有字典合并为一个字典,并像您最初尝试的那样使用它

all_dict = dict()
for item in y['filters']:
all_dict.update(item)
# Replace the list of dicts with the dict
y['filters'] = all_dict
w = y['filters']['filterB']
print(w) # val1

如果列表中有多个字典满足此条件,并且您希望w是所有这些值的列表,您可以这样做:

y = {"filters":[{"filterA":"All"},{"filterB":"val1"},{"filterB":"val2"}]}
all_w = list()
for item in y['filters']:
if 'filterB' in item:
all_w.append(item['filterB'])

或者,作为列表推导式:

all_w = [item['filterB'] for item in y['filters'] if 'filterB' in item]
print(all_w) # ['val1', 'val2']

请注意,列表推导式只是创建列表的迭代的语法糖。将常规循环写成列表推导式

并不能避免任何循环。

相关内容

  • 没有找到相关文章