python-3.x - 如何在字典中显示成绩最高的学生的姓名和成绩
问题描述
我是一个全新的编程新手,我坚持练习。
编辑:确切的错误代码“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
解决方案
您的代码现在正在做的是遍历字典的每个键值对(其中键是学生的姓名,值是学生的成绩列表),然后计算学生的平均值。然后,您现在使用的方式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)
推荐阅读
- swift - 使用适用于 iPhone7 及更高版本的最新 Swift 设置自定义 Haptic
- java - 在 Apache Commons Net 中为 FTP 协议启用日志记录
- windows - UWP:如果调整窗口大小,“webview”内容会被切断
- javascript - 使用 Guards (Roles, JWT) 获取用户数据
- javascript - document.execCommand('SaveAs',null,'filename.csv') 在 Chrome 上不起作用
- java - 在 Java 中对集合进行排序
- python - Pygame trigonometry:移动目标时的位置抖动
- entity-framework-6 - EF6 Code first 使用 Fluent API 的复合外键
- java - Spring MVC 中的多数据源切换问题。当第二个数据源不可用时,它会自动使用引用第二个的第一个数据源
- javascript - 如何在 Angular v6 应用程序之外访问组件的 HTML?