• Python Json 处理,列表生成式的项目使用 笔记


    区别

    1. # 解析 JSON 数据
    2. data = json.loads(json_data)
    3. # 取出包含 "test_version_rule_111" 字段的字典元素(单个)
    4. item = next((item for item in data['data']['list'] if item['ruleName'] == 'test_version_rule_111'), None)
    5. # 检查它的 scenarioId
    6. scenario_id = item['scenarioId'] if item else None
    7. # 解析 JSON 数据
    8. data = json.loads(json_data)
    9. # 取出包含 "test_version_rule_111" 字段的字典元素(多个)
    10. filtered_list = [item for item in data['data']['list'] if item['ruleName'] == 'test_version_rule_111']
    11. # 检查它们的 scenarioId
    12. scenario_ids = [item['scenarioId'] for item in filtered_list]

    如果你确定只有一个符合条件的字典元素,可以使用以下代码来优化:

    1. import json
    2. # 原始 JSON 数据
    3. json_data = '''
    4. {
    5. "data":{
    6. "currPage":1,
    7. "list":[
    8. {
    9. "createTime":1694062450000,
    10. "editor":"Anonymous User",
    11. "project":"FAW-VW.3.0",
    12. "ruleDescription":"这是新建的第二条\n改动,测试(20230905)",
    13. "ruleName":"test_830_new",
    14. "scenarioId":"9988776655",
    15. "status":9
    16. },
    17. {
    18. "createTime":1694062450000,
    19. "editor":"Anonymous User",
    20. "project":"FAW-VW.3.0",
    21. "ruleDescription":"test_version_rule_111",
    22. "ruleName":"test_version_rule_111",
    23. "scenarioId":"5411111111",
    24. "status":9
    25. },
    26. {
    27. "createTime":1694062450000,
    28. "editor":"Anonymous User",
    29. "project":"FAW-VW.3.0",
    30. "ruleDescription":"Test_vehicle_008",
    31. "ruleName":"Test_vehicle_008",
    32. "scenarioId":"5411000551",
    33. "status":9
    34. }
    35. ],
    36. "pageSize":3,
    37. "totalCount":45,
    38. "totalPage":15
    39. },
    40. "errorCode":"000000",
    41. "respCode":0,
    42. "respMsg":"SUCCESS"
    43. }
    44. '''
    45. # 解析 JSON 数据
    46. data = json.loads(json_data)
    47. # 取出包含 "test_version_rule_111" 字段的字典元素
    48. item = next((item for item in data['data']['list'] if item['ruleName'] == 'test_version_rule_111'), None)
    49. # 检查它的 scenarioId
    50. scenario_id = item['scenarioId'] if item else None
    51. # 输出结果
    52. 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 数据:

    1. import json
    2. # 原始 JSON 数据
    3. json_data = '''
    4. {
    5. "data":{
    6. "currPage":1,
    7. "list":[
    8. {
    9. "createTime":1694062450000,
    10. "editor":"Anonymous User",
    11. "project":"FAW-VW.3.0",
    12. "ruleDescription":"这是新建的第二条\n改动,测试(20230905)",
    13. "ruleName":"test_830_new",
    14. "scenarioId":"9988776655",
    15. "status":9
    16. },
    17. {
    18. "createTime":1694062450000,
    19. "editor":"Anonymous User",
    20. "project":"FAW-VW.3.0",
    21. "ruleDescription":"test_version_rule_111",
    22. "ruleName":"test_version_rule_111",
    23. "scenarioId":"5411111111",
    24. "status":9
    25. },
    26. {
    27. "createTime":1694062450000,
    28. "editor":"Anonymous User",
    29. "project":"FAW-VW.3.0",
    30. "ruleDescription":"Test_vehicle_008",
    31. "ruleName":"Test_vehicle_008",
    32. "scenarioId":"5411000551",
    33. "status":9
    34. }
    35. ],
    36. "pageSize":3,
    37. "totalCount":45,
    38. "totalPage":15
    39. },
    40. "errorCode":"000000",
    41. "respCode":0,
    42. "respMsg":"SUCCESS"
    43. }
    44. '''
    45. # 解析 JSON 数据
    46. data = json.loads(json_data)
    47. # 取出包含 "test_version_rule_111" 字段的字典元素
    48. filtered_list = [item for item in data['data']['list'] if item['ruleName'] == 'test_version_rule_111']
    49. # 检查它们的 scenarioId
    50. scenario_ids = [item['scenarioId'] for item in filtered_list]
    51. # 输出结果
    52. print(scenario_ids)

    运行以上代码将输出:

    ['5411111111']

    可见,存在 "test_version_rule_111" 字段的字典元素的 scenarioId 为 "5411111111"。

  • 相关阅读:
    【计算机基础知识】计算机的概念
    使用mcl-loadlib实现Python64位调用32位dll
    基于Android的O2O点餐系统
    配置参考一
    计算机毕业设计Java专辑鉴赏网站(源码+系统+mysql数据库+Lw文档)
    HR人才测评,如何做管理岗位的领导力测评?
    2023-11-08 monetdb-事务-只有RR隔离级别-原因分析
    一文了解深度学习实战——分类篇
    logback自定义appender
    UV 裂解的生物素-PEG2-叠氮|CAS:1192802-98-4生物素接头
  • 原文地址:https://blog.csdn.net/weixin_41298915/article/details/134009126