Используем max с параметром key, который указывает, по чему сравнивать элементы.
def best_student(grades: dict[str, list[int]]) -> str:
return max(grades, key=lambda name: sum(grades[name]) / len(grades[name]))
grades = {
"Аня": [5, 4, 5, 5],
"Боря": [3, 4, 4, 5],
"Вика": [5, 5, 5, 4],
}
print(best_student(grades)) # "Аня" (4.75) или "Вика" (4.75) — первая из равных
Разбор:
max(iterable, key=func) возвращает элемент, для которого func(элемент) максимально.
- Перебор по словарю даёт ключи (имена).
lambda name: ... — анонимная функция, считающая среднее.
Вручную:
best = None
best_avg = -1
for name, marks in grades.items():
avg = sum(marks) / len(marks)
if avg > best_avg:
best, best_avg = name, avg