You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python循环处理API嵌套数据并按条件分类file-number至列表

问题解决:嵌套数据中筛选含特定角色的记录

需求说明

从API返回的response["content"]数据中,遍历每条record:

  • 若record的任意involved项里的under-involved列表中存在role等于"legal protection service"的条目,将该record的{"file-number": 对应值}加入legalservice_true列表
  • 否则加入legalservice_false列表
  • 每条record仅能出现在其中一个列表

数据示例

{
  "file-name": "Some-clients-name",
  "file-number": "some-index",
  "assistants": [
    {"name": "Some-assistants-name","id": "de5c-21e4-ae01"},
    {"name": "Some-assistants-name","id": "1d6d-4973-b248f"},
    {"name": "Some-assistants-name","id": "bd3f-482a-gffc"}
  ],
  "involved": [
    {
      "contact": {"name": "Some name","id": 6562},
      "role": {"main-role": "client","side-role": "prosecutor"},
      "under-involved": [{"contact": {"name": "Some name","id": "424t"},"role": "legal protection service"}]
    },
    {"contact": {"name": "Some name","id": "339f"},"role": {"main-role": "opponent","side-role": "defendant"}}
  ],
  "legal areas": ["Contract law"],
  "clerk": {"name": "Some name","id": "4fsd-fwe4278-b07df"},
  "keywords": [],
  "status": "ACTIVE",
  "reason": "coaching"
}

原代码问题

  1. 嵌套循环中直接添加record,导致同一record因多个匹配项被重复加入列表
  2. try/except范围过大,会捕获无关异常(比如键不存在以外的错误)
  3. 用固定range(0,5)遍历under-involved,容易触发索引越界,且无法适配长度小于5的列表

修正后的代码

import requests

headersAuth = {
    "Authorization": "Bearer " + refreshToken(refresh_token),
    "accept": "application/json"
}

legalservice_true = []
legalservice_false = []

# 遍历10页数据
for page in range(0, 10):
    url = f"https://app.labrog.de/v1/awwkten?page={page}"
    response = requests.get(url, headers=headersAuth)
    records = response.json()["content"]
    
    for record in records:
        has_legal_service = False
        # 遍历当前record的所有involved项
        for involved in record.get("involved", []):
            # 获取under-involved列表,不存在则返回空列表
            under_involved_list = involved.get("under-involved", [])
            for under_involved in under_involved_list:
                # 检查role是否匹配
                if under_involved.get("role") == "legal protection service":
                    has_legal_service = True
                    # 找到匹配项后直接跳出所有内层循环,避免重复检查
                    break
            if has_legal_service:
                break
        
        # 根据标记添加对应字典到列表
        file_number_dict = {"file-number": record.get("file-number")}
        if has_legal_service:
            legalservice_true.append(file_number_dict)
        else:
            legalservice_false.append(file_number_dict)

代码说明

  • 用has_legal_service布尔变量标记当前record是否符合条件,确保每条record只判断一次
  • 使用dict.get()方法替代直接索引,避免因键不存在抛出异常,无需依赖try/except
  • 找到匹配项后立即跳出内层循环,减少不必要的遍历
  • 最终添加的是{"file-number": ...}字典,而非整个record,符合需求输出格式

内容的提问来源于stack exchange,提问作者arb-ox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 02:52:18