Сортировка по среднему заначению

Суть задачи состоит в том, что на вход мы получаем Фамилии учеников с их оценками по трем предметам.
Программа должна вывести Фамилии учеников с их оценками, в порядке убывания их среднего балла, и если балл одинаковый, то вывести фамилии по алфавиту.

Ввод:

4 (кол-во учеников)

Ivanov  5 10  3
Pupkin  7  8 12
Petrov 10 10  7
Sidorov 3  4  2

Вывод:

Petrov 10 10  7 9.00
Pupkin  7  8 12 9.00
Ivanov  5 10  3 6.00
Sidorov 3  4  2 3.00

Мой вариант кода:`

class Student:
    def __init__(self, stud):
        self.__stud = stud

    def data_sorter(self):
        list_data = list(self.__stud.items())
        list_data.sort(key=lambda elem: elem[1])
        list_data = list_data[::-1]
        return list_data

    def key_sorter(self):
        list_keys = list(self.__stud.keys())
        list_keys.sort()
        return list_keys

    def getSortedData(self):
        for key in Student.key_sorter(self):
            yield key
            for i in range(-1, len(self.__stud[key]) - 1):
                if i == -1:
                    for elem in self.__stud[key][i]:
                        yield elem
                else:
                    yield self.__stud[key][i]
            yield '\n'


N = int(input())
all_students = dict()
for _ in range(N):
    student, *marks = input().split()
    k = 0
    for elem in marks:
        k += int(elem)
    all_students[student] = '%.2f' % (k / 3), marks

cls_student = Student(all_students)

print(' '.join([str(i) for i in cls_student.getSortedData()]))`

На выход получаю следующее:

Ivanov  5 10  3 6.00 
Petrov 10 10  7 9.00 
Pupkin  7  8 12 9.00 
Sidorov 3  4  2 3.00 

Ответы (1 шт):

Автор решения: MaxU

Как-то у вас все сложно...

data = [
  ["Ivanov",  5, 10,  3],
  ["Pupkin",  7,  8, 12],
  ["Petrov", 10, 10,  7],
  ["Sidorov", 3,  4,  2],
]

res = sorted(data, key=lambda x: (-sum(x[1:]), x[0]))

результат:

In [46]: res
Out[46]:
[['Petrov', 10, 10, 7],
 ['Pupkin', 7, 8, 12],
 ['Ivanov', 5, 10, 3],
 ['Sidorov', 3, 4, 2]]
→ Ссылка