如何用Python从三个不等长列表生成学生考试成绩嵌套字典
实现方案
注意:Python字典的键具有唯一性,你给出的目标结构中存在两个同名学生F,最终生成的字典只会保留最后一个F的成绩,若需要保留所有同名学生数据,建议给学生标识添加唯一后缀区分。
方案1:Pandas内置方法(最简便)
直接调用Pandas自带的字典转换方法,一行代码即可实现目标结构:
dd = df.set_index('Student').to_dict('index')
参数orient='index'会自动将行索引(学生名)作为外层字典的键,列名(考试名)作为内层字典的键,对应单元格数值作为内层字典的值。
方案2:使用zip函数手动实现
如果要按你的思路用zip函数实现,只需要先获取每个学生对应的成绩列表即可:
- 首先提取所有学生的成绩列表,得到6个元素的嵌套列表,每个子元素为单个学生3门考试的分数:
score_list = df[assignments].values.tolist()
- 嵌套使用zip生成双层字典:
dd = { student: dict(zip(assignments, scores)) for student, scores in zip(students, score_list) }
原理说明:
- 外层
zip(students, score_list)将每个学生和自己的3门成绩列表一一配对 - 内层
zip(assignments, scores)将考试名和对应分数一一配对,生成单个学生的成绩字典
内容的提问来源于stack exchange,提问作者Toly
相关产品推荐
相关产品推荐

