python - 如何根据每个科目的最小值来组织学生的分数
问题描述
我有一个文件,其中包含 4 个学生姓名和 4 个科目的分数。第一列包含学生姓名,接下来的 5 列包含学生对每个科目的标记。每一行都是一个不同的学生。使用 Python,我想创建一个包含每个主题的最低分数的列表。
例如:
Name,Math,Art,Science,English
Jess,43,87,39,38
Mark,38,28,87,34
John,77,36,69,99
Ash,63,89,97,67
输出:
[38,28,39,34]
到目前为止,我已经写了这篇文章,试图创建一个包含数学标记的新列表,然后我将对其进行排序..
csvfile = "sample.csv"
file = open(csvfile,"r")
math = []
for line in file:
math.append(f[1])
但是,它返回错误消息:
Traceback (most recent call last):
File ...
mark1.append(f[2])
TypeError: '_io.TextIOWrapper' object is not subscriptable
为了创建一个包含每行索引 1 分数的新列表,我做错了什么?谢谢
解决方案
使用 CSV Reader(非常适合解析 CSV 文件)
代码
更新了@JustinEzequiel 的建议(见评论)
import csv
#https://courses.cs.washington.edu/courses/cse140/13wi/csv-parsing.html
with open('sample.csv', mode='r') as infile:
# Place students as a list of dictionaries
reader = csv.DictReader(infile, skipinitialspace = True)
# Get subjects from header (fieldnames)
subjects = reader.fieldnames[:]
subjects.remove('Name')
# Get students names and grades
lst = [student for student in reader]
# Find min by subject for all students
min_scores = [min(student[subject] for student in lst) for subject in subjects]
print(min_scores)
测试
文件样本.csv
Name,Math,Art,Science,English
Jess,43,87,39,38
Mark,38,28,87,34
John,77,36,69,99
Ash,63,89,97,67
输出
['38', '28', '39', '34']
推荐阅读
- angular - 反应式表单确认密码和确认电子邮件验证器角度 4
- r - 在宽矩阵上意外计算时如何防止 rsession 崩溃
- java - 映射Java8的字符串列表
- c# - 处理实体中存储过程返回的数据的正确方法
- php - AWS ELB 后面的非标准端口上的 WordPress + Nginx 导致链接断开
- c++ - 水平碰撞不工作AABB C++
- java - cache2k 和 Generic T 不能一起玩
- javascript - REST API检查javascript中是否存在某些值的SQL列
- ruby-on-rails - 使用 Ruby 搜索 JSON 响应并计算出现次数
- python - 每月对 Dataframe、Pandas 重新采样后的索引错误