首页 > 解决方案 > 如何在字典中显示成绩最高的学生的姓名和成绩

问题描述

我是一个全新的编程新手,我坚持练习。

编辑:确切的错误代码“avgDict[k] =max(sum(v)/float(len(v)))

TypeError:'float' 对象不可迭代”

如果我删除最大值,它会打印每个学生的平均值。

# student_grades contains scores (out of 100) for 5 assignments
diction = {
    'Andrew': [56, 79, 90, 22, 50],
    'Colin': [88, 62, 68, 75, 78],
    'Alan': [95, 88, 92, 85, 85],
    'Mary': [76, 88, 85, 82, 90],
    'Tricia': [99, 92, 95, 89, 99]
}

def averageGrades(diction):
    avgDict = {}
    for k, v in diction.items():
          avgDict[k] =max(sum(v)/ float(len(v)))
    return avgDict

标签: python-3.x

解决方案


您的代码现在正在做的是遍历字典的每个键值对(其中键是学生的姓名,值是学生的成绩列表),然后计算学生的平均值。然后,您现在使用的方式max是尝试找到单个学生平均值的最大值。这就是您收到错误的原因,因为max需要一个可迭代或多个参数,并且 a float(这是由 产生的值sum(v) / float(len(v)))不是可迭代的。您应该先计算所有平均值,然后在平均值字典中找到最大值:

diction = {
    'Andrew': [56, 79, 90, 22, 50],
    'Colin': [88, 62, 68, 75, 78],
    'Alan': [95, 88, 92, 85, 85],
    'Mary': [76, 88, 85, 82, 90],
    'Tricia': [99, 92, 95, 89, 99]
}

def averageGrades(diction):
    avgDict = {}
    for k, v in diction.items():
          avgDict[k] = sum(v) / len(v)

    return max(avgDict.items(), key=lambda i: i[1]) # find the pair which has the highest value

print(averageGrades(diction)) # ('Tricia', 94.8)

旁注,在 Python 3 中,/默认情况下使用正常除法(与整数除法相反),因此不需要强制转换len(v)为 a 。float

或者,如果您不需要创建avgDict变量,您可以直接确定最大值而无需中间变量:

def averageGrades(diction):
    return max([(k, sum(v) / len(v)) for k, v in diction.items()], key=lambda i: i[1])

print(averageGrades(diction)) # ('Tricia', 94.8)

推荐阅读