如何访问字典列表内嵌套的dict值并解决空marks数组导致数据遗漏问题
实现方案
原代码存在的问题
- 语法错误:
for student in response语句末尾缺少英文冒号 - 逻辑错误:内层循环遍历对象错误,应该遍历
student['marks']而非student本身 - 核心缺陷:当
marks数组为空时,内层循环不会执行,导致无成绩的学生完全不会被加入结果列表
优化后实现代码
response = response.json() new_list = [] students = response['students'] for student in students: # 先构造学生基础信息,保证每个学生都一定会被加入列表 temp = { "student_reference_id": student['student_reference_id'], "name": student['name'], "birth_year": student['birth_year'], "gender": student['gender'], # 分数字段默认设为空值,可按需修改为0、空字符串等其他默认值 "science": None, "physics": None } # 仅当存在成绩时更新分数字段 if student['marks']: # 取marks数组第一条成绩记录,若需处理多份成绩可在此处加循环遍历 mark = student['marks'][0] temp['science'] = mark.get('science') temp['physics'] = mark.get('physics') new_list.append(temp)
逻辑说明
- 优先构造学生基础信息,确保无论是否有考试成绩,所有学生都会被收录到结果列表中
- 用
get方法读取分数字段,避免对应字段缺失时程序报错 - 如果单个学生可能存在多条成绩记录,把
if student['marks']替换为遍历marks数组的循环即可生成多条对应成绩的记录
内容的提问来源于stack exchange,提问作者user16043464
相关产品推荐
相关产品推荐

