在python字典中操作值
所以我从一个tsv文件创建了这个字典在python字典中操作值,python,python-3.x,dictionary,mean,median,Python,Python 3.x,Dictionary,Mean,Median,所以我从一个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 = ma
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标记
爱丽丝·布朗8.5
弗朗辛·沃尔特斯9
罗伯特·威尔逊7
伊芙琳·斯图尔特10
玛戈·卡津斯基9.5
戈登·罗杰斯8.5
斯蒂芬妮·胡佛9
罗杰·布罗斯南8.7
弗朗辛·威廉姆森9
伦纳德·伦卡8
罗莎琳德·萨缪尔森6.5
萨沙·列夫琴科8
Anastasia Melnyk 8.5
查理·沃森8
在找到具有最高等级的名称后
要计算分数大于中位数的名称,可以执行以下操作:
names=[ii代表等级中的ii.keys(),如果等级[ii]>median]
考虑到你已经计算了中位数,平均值也差不多。看看如何实施中间值。要计算平均值,请执行以下操作:
mean=float(sum(grades.values())/len(grades)
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
在
按等级排序的列表中使用列表理解,该列表按大于中位数的等级过滤,类似于上述理解的平均值。好的,将所有答案放在上面,这就是我的答案:
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()
谢谢你的帮助 您安装了numpy
吗?@Lord Henry Wotton没有,但我必须计算中值,请尝试grades.values()上的一种实现