如何用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" }
原代码问题
- 嵌套循环中直接添加record,导致同一record因多个匹配项被重复加入列表
try/except范围过大,会捕获无关异常(比如键不存在以外的错误)- 用固定
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
相关产品推荐
相关产品推荐

