【发布时间】:2021-08-27 20:44:35
【问题描述】:
我正在尝试为总分最高的学生返回学生姓名和他们的总分。 我的代码如下。
代码:
# student_grades contains scores (out of 100) for 5 assignments
student_grades = {
'Andrew': [56, 79, 90, 22, 50],
'Nisreen': [88, 62, 68, 75, 78],
'Alan': [95, 88, 92, 85, 85],
'Chang': [76, 88, 85, 82, 90],
'Tricia': [99, 92, 95, 89, 99]
}
# calculate the top student and their total points
list_of_student_grades = list(student_grades.items())
top_student = tuple([(name, sum(grades)) for (name, grades) in list_of_student_grades if
sum(grades) == max([sum(grades) for name, grades in list_of_student_grades])])
print(list_of_student_grades)
print(top_student)
输出:
[('Andrew', [56, 79, 90, 22, 50]), ('Nisreen', [88, 62, 68, 75, 78]), ('Alan', [95, 88, 92, 85, 85]), ('Chang', [76, 88, 85, 82, 90]), ('Tricia', [99, 92, 95, 89, 99])]
(('Tricia', 474),)
我有两个问题... 首先,为什么输出不只是 ('Tricia', 474) (为什么额外的逗号和括号集)? 其次,有没有更好的方法来解决这个问题?
提前谢谢你!
【问题讨论】:
-
sum_of_points = [(k, sum(student_grades[k])) for k in student_grades.keys()]这将返回元组列表,其中第一项是学生姓名,下一项是点的总和。 -
单线解决方案:
tuple(map(lambda x: max(x.items(), key=lambda v:v[1]),[dict(zip(student_grades.keys(), map(sum,student_grades.values())))]))输出为(('Tricia', 474),)
标签: python tuples list-comprehension