所以我已经从tsv文件中创建了这个词典,
import csv
grades = {}
with open('grades.tsv', newline='') as csv_f:
for row in csv.DictReader(csv_f, delimiter='\t'):
fullname = row['#fname'] + ' ' + row['lname']
grades[fullname] = float(row['marks'])
maxgrade = max(grades,key=grades.get)
print(grades)
print(maxgrade)
csv_f.close()
tsv文件如下所示:
#fname lname marks
Alice Brown 8.5
Francine Walters 9
Robert Wilson 7
Evelyn Stewart 10
Margo Kazinsky 9.5
Gordon Rogers 8.5
Stephanie Hoover 9
Roger Brosnan 8.7
Francine Williamson 9
Leonard Runka 8
Rosalind Samuelson 6.5
Sasha Levchenko 8
Anastasia Melnyk 8.5
Charlie Watson 8
找到成绩最高的名字后
答案 0 :(得分:2)
- 我不知道如何操纵这些值来查找所有等级高于班级均值的学生的姓名。 (平均值是值之和除以值的总和)。
醇>
您可以使用列表推导来创建符合条件的学生子列表:
above_mean = [(s,g) for s,g in grades.items() if g > mean]
- 我不知道如何找到班级的中位数。
醇>
这比较棘手。对学生/成绩列表进行排序:
import operator
sorted_by_grade = sorted(grades.items(),key=operator.itemgetter(1))
然后找到中间值。如果列表的长度为奇数,则中间值索引为:
median_index = len(sorted_by_grade) // 2 # Python 3 syntax for integer division
如果列表的长度是偶数,则它是中间两个数字除以2的总和:
half = len(sorted_by_grade) // 2
median = (sorted_by_grade[half-1][1] + sorted_by_grade[half][1]) / 2 # Python 3 float division
- 所有成绩均高于中位数的学生的姓名。
醇>
在sorted_by_grade
列表中使用列表推导,按大于中位数的等级筛选,类似于上面的理解值。
答案 1 :(得分:0)
要计算成绩中位数较高的名字,您可以这样做:
names=[ii for ii in grades.keys() if grades[ii] > median]
假设您计算了中位数,并且平均值相似。请查看this如何实现中位数。计算均值:
mean=float(sum(grades.values()))/len(grades)
答案 2 :(得分:0)
好的,把上面的所有答案都放在上面,这就是我所拥有的:
import csv
import operator
grades = {}
with open('grades.tsv', newline='') as csv_f:
for row in csv.DictReader(csv_f, delimiter='\t'):
fullname = row['#fname'] + ' ' + row['lname']
grades[fullname] = float(row['marks'])
maxgrade = max(grades,key=grades.get)
mean = float(sum(grades.values()))/len(grades)
above_mean = [(student,grade) for student,grade in grades.items() if grade> mean]
sorted_by_grade = sorted(grades.items(),key = operator.itemgetter(1))
median_index = len(sorted_by_grade) // 2
half = len(sorted_by_grade) // 2
median = (sorted_by_grade[half-1][1] + sorted_by_grade[half][1])/2
names = [ii for ii in grades.keys() if grades[ii]> median]
print(grades)
#print(maxgrade)
#print(mean)
#print(sorted_by_grade)
#print(above_mean)
print(median)
print(names)
#print(len(grades))
csv_f.close()
感谢您的帮助!