区别
- # 解析 JSON 数据
- data = json.loads(json_data)
-
- # 取出包含 "test_version_rule_111" 字段的字典元素(单个)
- item = next((item for item in data['data']['list'] if item['ruleName'] == 'test_version_rule_111'), None)
-
- # 检查它的 scenarioId
- scenario_id = item['scenarioId'] if item else None
-
-
- # 解析 JSON 数据
- data = json.loads(json_data)
-
- # 取出包含 "test_version_rule_111" 字段的字典元素(多个)
- filtered_list = [item for item in data['data']['list'] if item['ruleName'] == 'test_version_rule_111']
-
- # 检查它们的 scenarioId
- scenario_ids = [item['scenarioId'] for item in filtered_list]
如果你确定只有一个符合条件的字典元素,可以使用以下代码来优化:
- import json
-
- # 原始 JSON 数据
- json_data = '''
- {
- "data":{
- "currPage":1,
- "list":[
- {
- "createTime":1694062450000,
- "editor":"Anonymous User",
- "project":"FAW-VW.3.0",
- "ruleDescription":"这是新建的第二条\n改动,测试(20230905)",
- "ruleName":"test_830_new",
- "scenarioId":"9988776655",
- "status":9
- },
- {
- "createTime":1694062450000,
- "editor":"Anonymous User",
- "project":"FAW-VW.3.0",
- "ruleDescription":"test_version_rule_111",
- "ruleName":"test_version_rule_111",
- "scenarioId":"5411111111",
- "status":9
- },
- {
- "createTime":1694062450000,
- "editor":"Anonymous User",
- "project":"FAW-VW.3.0",
- "ruleDescription":"Test_vehicle_008",
- "ruleName":"Test_vehicle_008",
- "scenarioId":"5411000551",
- "status":9
- }
- ],
- "pageSize":3,
- "totalCount":45,
- "totalPage":15
- },
- "errorCode":"000000",
- "respCode":0,
- "respMsg":"SUCCESS"
- }
- '''
-
- # 解析 JSON 数据
- data = json.loads(json_data)
-
- # 取出包含 "test_version_rule_111" 字段的字典元素
- item = next((item for item in data['data']['list'] if item['ruleName'] == 'test_version_rule_111'), None)
-
- # 检查它的 scenarioId
- scenario_id = item['scenarioId'] if item else None
-
- # 输出结果
- print(scenario_id)
运行以上代码输出:
5411111111
这样更高效,减少了不必要的循环遍历。注意,如果没有找到符合条件的字典元素,将返回 None,可以根据实际情况进行处理。
item = next((item for item in data['data']['list'] if item['ruleName'] == 'test_version_rule_111'), None)
这一行代码使用了 Python 的生成器表达式和 next() 函数来找到符合条件的字典元素。
首先,生成器表达式 (item for item in data['data']['list'] if item['ruleName'] == 'test_version_rule_111') 是一个按需生成满足条件的字典元素的生成器。它遍历 data['data']['list'] 列表中的每个元素,并仅选择 item['ruleName'] == 'test_version_rule_111' 条件为真的元素。
然后,next() 函数用于获取生成器中的下一个元素。在括号中,我们将生成器表达式作为第一个参数传递给 next() 函数。如果生成器有元素,则返回第一个满足条件的元素;如果生成器为空,则返回 None。
最终,item 变量将得到满足条件的字典元素,如果该字典元素不存在,则 item 将为 None。
这种用法可以有效地找到列表中的第一个符合条件的元素,避免了不必要的遍历,并提高了代码的效率。
当不确定列表元素是否唯一的时候*(更高级写法)
可以使用以下代码来操作 JSON 数据:
- import json
-
- # 原始 JSON 数据
- json_data = '''
- {
- "data":{
- "currPage":1,
- "list":[
- {
- "createTime":1694062450000,
- "editor":"Anonymous User",
- "project":"FAW-VW.3.0",
- "ruleDescription":"这是新建的第二条\n改动,测试(20230905)",
- "ruleName":"test_830_new",
- "scenarioId":"9988776655",
- "status":9
- },
- {
- "createTime":1694062450000,
- "editor":"Anonymous User",
- "project":"FAW-VW.3.0",
- "ruleDescription":"test_version_rule_111",
- "ruleName":"test_version_rule_111",
- "scenarioId":"5411111111",
- "status":9
- },
- {
- "createTime":1694062450000,
- "editor":"Anonymous User",
- "project":"FAW-VW.3.0",
- "ruleDescription":"Test_vehicle_008",
- "ruleName":"Test_vehicle_008",
- "scenarioId":"5411000551",
- "status":9
- }
- ],
- "pageSize":3,
- "totalCount":45,
- "totalPage":15
- },
- "errorCode":"000000",
- "respCode":0,
- "respMsg":"SUCCESS"
- }
- '''
-
- # 解析 JSON 数据
- data = json.loads(json_data)
-
- # 取出包含 "test_version_rule_111" 字段的字典元素
- filtered_list = [item for item in data['data']['list'] if item['ruleName'] == 'test_version_rule_111']
-
- # 检查它们的 scenarioId
- scenario_ids = [item['scenarioId'] for item in filtered_list]
-
- # 输出结果
- print(scenario_ids)
运行以上代码将输出:
['5411111111']
可见,存在 "test_version_rule_111" 字段的字典元素的 scenarioId 为 "5411111111"。