Это отчасти потому, что ваши входные файлы представляют собой строки, структурированные как «Integer: String». Когда вы открываете файл и начинаете читать построчно и вызываете line.strip()
, вы просто удаляете все лишние пробелы в начале и конце каждой строки строки.
Имея это в виду, когда вы сортируете, вы используете клавишу lambda x: float(x[0])
. Это говорит функции sorted
, что нужно взять каждого человека в списке лидеров и взять первый символ каждой строки (потому что все члены списка лидеров являются строками!) И преобразовать этот первый символ в число с плавающей точкой. Значение float(x[0])
для всех людей в списке лидеров - 1
, что означает, что алгоритм сортировки считает, что ваши значения уже отсортированы!
Чтобы исправить это, вы можете использовать split()
.
leaders = list()
filename = 'leaderboard.txt'
with open(filename) as fin:
for line in fin:
leaders.append(line.split())
y = sorted(leaders, key = lambda x: float(x[0]), reverse=True)
for eachline in y[:5]: #after this and the next line it prints just the file contents
print(" ".join(eachline))
Вывод:
19 : Felix
16 : Muhammad
14 : Steve
13 : David
12 : Alex
Можно отсортировать в порядке убывания, добавив ключевое слово reverse=True
в метод сортировки.
y = sorted(leaders, key = lambda x: float(x[0]), reverse=True)