迭代json列表并使用Python获取特定的键和值

迭代json列表并使用Python获取特定的键和值,python,Python,我有一个类似这样的JSON列表(这是一个JSON响应,下面是在我执行了JSON.loads之后) 如果name='blah'或'blah0'或'blah1'或'blah2'或'blah3',我想获取列表的name和status 基本上,对于所有匹配,我希望将所有名称和状态存储在单独的变量中,以便在其他地方使用。(可以动态创建变量,也可以静态分配变量,这对我也适用) 我试过了,但似乎没有达到我想要的效果 for value in data: if value['name'] in ['bla

我有一个类似这样的JSON列表(这是一个JSON响应,下面是在我执行了
JSON.loads
之后)

如果
name='blah'或'blah0'或'blah1'或'blah2'或'blah3',我想获取列表的
name
status
基本上,对于所有匹配,我希望将所有
名称
状态
存储在单独的变量中,以便在其他地方使用。(可以动态创建变量,也可以静态分配变量,这对我也适用)

我试过了,但似乎没有达到我想要的效果

for value in data:
   if value['name'] in ['blah', 'blah0', 'blah1', 'blah2', 'blah3']:
        print(value['name'], value['status'])

这会将
名称
状态
打印为一行下的字符串。但我希望将每个名称和状态分配给一个变量,以便以后使用它。非常感谢您的帮助

您并不真正需要动态变量,但可以使用列表。您还应利用恒定成本集成员资格测试:

keep = set(['blah', 'blah0', 'blah1', 'blah2', 'blah3'])
result = [(value['name'], value['status']) for value in data if value['name'] in keep]
print(result)
输出:

[('blah', 'ok'),
 ('blah0', 'ok'),
 ('blah1', 'ok'),
 ('blah2', 'ok'),
 ('blah3', 'ok')]
如果你想要一本字典:

keep = set(['blah', 'blah0', 'blah1', 'blah2', 'blah3'])
result = {value['name']: value['status'] for value in data if value['name'] in keep}
print(result)

您并不真正需要动态变量,但可以使用列表。您还应利用恒定成本集成员资格测试:

keep = set(['blah', 'blah0', 'blah1', 'blah2', 'blah3'])
result = [(value['name'], value['status']) for value in data if value['name'] in keep]
print(result)
输出:

[('blah', 'ok'),
 ('blah0', 'ok'),
 ('blah1', 'ok'),
 ('blah2', 'ok'),
 ('blah3', 'ok')]
如果你想要一本字典:

keep = set(['blah', 'blah0', 'blah1', 'blah2', 'blah3'])
result = {value['name']: value['status'] for value in data if value['name'] in keep}
print(result)
已编辑 尝试以下方法:

new_data = []
# Extract all the data and map them by name and status
for value in data:
    name = value.get("name")
    status = value.get("status")
    if name in ['blah', 'blah0', 'blah1', 'blah2', 'blah3']:
         new_data.append(dict(
            name=name,
            status=status))
选项1

# loop through the new data
for data in new_data:
    print(data)

# OUTPUT:
{'name': 'blah', 'status': 'ok'}
{'name': 'blah0', 'status': 'ok'}
{'name': 'blah1', 'status': 'ok'}
{'name': 'blah2', 'status': 'ok'}
{'name': 'blah3', 'status': 'ok'}
选项2

for data in new_data:
    for key, value in data.items():
        print(key, value)
#OUTPUT:
name blah
status ok
name blah0
status ok
name blah1
status ok
name blah2
status ok
name blah3
status ok
选项3

for data in new_data:
        print(data['name'], data['status'])
#OUTPUT
blah ok
blah0 ok
blah1 ok
blah2 ok
blah3 ok
已编辑 尝试以下方法:

new_data = []
# Extract all the data and map them by name and status
for value in data:
    name = value.get("name")
    status = value.get("status")
    if name in ['blah', 'blah0', 'blah1', 'blah2', 'blah3']:
         new_data.append(dict(
            name=name,
            status=status))
选项1

# loop through the new data
for data in new_data:
    print(data)

# OUTPUT:
{'name': 'blah', 'status': 'ok'}
{'name': 'blah0', 'status': 'ok'}
{'name': 'blah1', 'status': 'ok'}
{'name': 'blah2', 'status': 'ok'}
{'name': 'blah3', 'status': 'ok'}
选项2

for data in new_data:
    for key, value in data.items():
        print(key, value)
#OUTPUT:
name blah
status ok
name blah0
status ok
name blah1
status ok
name blah2
status ok
name blah3
status ok
选项3

for data in new_data:
        print(data['name'], data['status'])
#OUTPUT
blah ok
blah0 ok
blah1 ok
blah2 ok
blah3 ok

与其给变量赋值,不如给字典赋值,然后用你的字典get('somekey',fallback_value)
@JacobIRR你能把它作为答案吗?我对python真的很陌生:)非常感谢不要给变量赋值,而是给字典赋值,然后你可以用
你的dict.get('somekey',fallback\u value)
@JacobIRR你能把它作为一个答案吗?我真的是python新手:)非常感谢Hanks@Tomothy32。但是如何分别访问
'blah'
'ok'
?就像我打印(结果[0])时一样,它打印整个
('blah','ok')
@Bharath
result[0][0]
result[0][1]
谢谢@Tomothy32。但是如何分别访问
'blah'
'ok'
?就像我打印(结果[0])时一样,它打印整个
('blah','ok')
@Bharath
result[0][0]
result[0][1]
谢谢@Scircia。但是我如何分别访问每个“blah”和“ok”?如果在print语句中看到两个变量,我想访问它们,比如,
blah
ok
blah0
ok
,等等。姓名和状态。这就是你可以访问它们的方式。若您愿意,您可以创建一个包含字典的列表,并按名称键访问每个字典。让我来编辑一下,希望你能理解我的意思。谢谢你的编辑。好的,我现在知道我想要什么了,你能把它作为一个口授吗?比如,
'blah':'ok'
,'blah0':'ok'等等,这样我就可以分别访问
blah
ok
。对不起,如果我打扰你太多了。谢谢@Scircia。但是我如何分别访问每个“blah”和“ok”?如果在print语句中看到两个变量,我想访问它们,比如,
blah
ok
blah0
ok
,等等。姓名和状态。这就是你可以访问它们的方式。若您愿意,您可以创建一个包含字典的列表,并按名称键访问每个字典。让我来编辑一下,希望你能理解我的意思。谢谢你的编辑。好的,我现在知道我想要什么了,你能把它作为一个口授吗?比如,
'blah':'ok'
,'blah0':'ok'等等,这样我就可以分别访问
blah
ok
。对不起,我打扰你太多了。