使用Python遍历JSON列表并获取特定的键和值

2024-09-27 07:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个JSON列表(它是一个JSON响应,下面是在我做了json.loads之后)

[{'status': 'ok', 'slot': None, 'name': 'blah', 'index': 0, 'identify': 'off', 
'details': None, 'speed': None, 'temperature': None}, {'status': 'ok', 'slot': 
None, 'name': 'blah0', 'index': 0, 'identify': 'off', 'details': None, 
'speed': None, 'temperature': None}, {'status': 'ok', 'slot': None, 'name': 
'blah1', 'index': 1, 'identify': 'off', 'details': None, 'speed': None, 
'temperature': None}, {'status': 'ok', 'slot': None, 'name': 'blah2', 
'index': 2, 'identify': 'off', 'details': None, 'speed': None, 'temperature': 
None}, {'status': 'ok', 'slot': None, 'name': 'blah3', 'index': 3,
'identify': 'off', 'details': None, 'speed': None, 'temperature': None}]

我想得到列表的namestatus,如果name='blah' or 'blah0' or 'blah1' or 'blah2' or 'blah3' 本质上,对于所有匹配,我希望将所有namestatus存储在单独的变量中,以便在其他地方使用。(可以动态创建变量,也可以静态赋值)

我试过了,但似乎不是我想要的。你知道吗

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

这会将namestatus打印为一个字符串,一行在另一行的下面。但我希望每个名称和状态都分配给一个变量,以便以后使用。非常感谢您的帮助!你知道吗


Tags: ornamenoneindexvaluestatusokdetails
2条回答

编辑 尝试以下操作:

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

你不需要动态变量,但是你可以使用列表。您还应该利用固定成本集成员身份测试:

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)

相关问题 更多 >

    热门问题