Python中使用for循环将多个列表存入嵌套字典的实现问题
问题根因
- 化学成绩列表长度异常:你定义的
students_chemistry_marks共有11个元素,其余学生姓名、数学、英语、物理成绩列表均为10个元素,zip函数会按最短列表长度截断数据,需先删除多余的最后一个元素99.99 - 字典赋值逻辑错误:循环内每次直接给
student_info赋值新的单学生字典,覆盖了之前存入的内容,最终只会保留最后一次循环的学生数据,应该用字典新增键的方式追加数据 - 输出逻辑不合理:存在多余换行符、无对齐规则,导致输出格式混乱
- 变量命名不规范:用Python内置函数名
sum做自定义变量名,可能引发潜在冲突,建议更换为其他名称
修正后完整代码
# 修正化学成绩列表长度,与其他列表保持一致为10个元素 student_names = ['james','john','david','michael','richard','paul','mark','william','thomas','steven'] students_math_marks = [90.11,89.23,99.99,93.33,92.11,85.31,93.90,93.88,92.82,89.09] students_english_marks = [88.91,90.21,97.35,98.44,93.55,96.01,99.99,99.50,94.88,95.05] students_physics_marks = [99.05,92.33,94.44,95.55,96.66,97.77,98.88,99.99,91.11,90.98] students_chemistry_marks = [90.05,99,91.88,92.77,93.66,94.55,95.44,96.33,97.22,98.11] # 打印表头,用固定宽度保证对齐 print(f'{"name":<10}{"math":<12}{"english":<12}{"physics":<12}{"chemistry":<12}{"total marks":<12}') print('-' * 70) student_info = {} for n,m,e,p,c in zip(student_names,students_math_marks,students_english_marks,students_physics_marks,students_chemistry_marks): total = round((m+e+p+c),2) # 给字典新增键值对,而不是覆盖整个字典 student_info[n] = { "math": float(m), 'english': float(e), 'physics': float(p), 'chemistry': float(c), 'total_marks': total } # 格式化输出单行学生成绩 print(f'{n:<10}{m:<12}{e:<12}{p:<12}{c:<12}{total:<12}') # 如果需要查看最终生成的完整嵌套字典,可取消下面注释 # print(student_info)
内容的提问来源于stack exchange,提问作者si li
相关产品推荐
相关产品推荐

