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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:24:03