在python字典中操作值

在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

所以我从一个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标记
爱丽丝·布朗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()上的一种实现