Как отсортировать этот файл по номерам и показать его читателям? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть этот файл, представляющий баллы:

Ishaan - 72
Jack - 84
Bob - 23
Louis - 77

Пока я собрал все баллы в один список без всех символов новой строки:

 # Opening the file
ScoresFile2 = "/Users/KADAM BOYS/Desktop/Ishaan's Folder/Homework (Year 10)/Computing/Mock Project/Scores.txt"

#Editing the scores into a list
ScoresWithNames = [] 

#Appending the scores to a list and removing all the newline characters
with open(ScoresFile2) as file2:
    for line in file2:
        ScoresWithNames.append(line.strip())

Перечислите это создает это:

['Ishaan - 72', 'Jack - 84', 'Bob - 23', 'Louis - 77']

Но я не знаю, как отсортировать файл по номерам.

Ответы [ 2 ]

3 голосов
/ 16 апреля 2020

Для сортировки списка:

l = ['Ishaan - 72', 'Jack - 84', 'Bob - 23', 'Louis - 77']

Использование:

[j[::-1] for j in sorted([i.split(' - ')[::-1] for i in l],key=lambda x: int(x[0]))]

Дает:

[['Bob', '23'], ['Ishaan', '72'], ['Louis', '77'], ['Jack', '84']]

Теперь иметь '-':

[' - '.join(k for k in j[::-1]) for j in sorted([i.split(' - ')[::-1] for i in l],key=lambda x: int(x[0]))]

Дает:

['Bob - 23', 'Ishaan - 72', 'Louis - 77', 'Jack - 84']

Здесь ответ находится в порядке возрастания. Для обратного:

[' - '.join(k for k in j[::-1]) for j in sorted([i.split(' - ')[::-1] for i in l],reverse = True,key=lambda x: int(x[0]))]

дает:

['Jack - 84', 'Louis - 77', 'Ishaan - 72', 'Bob - 23']
1 голос
/ 16 апреля 2020

Более простое решение - использовать функцию lambda:

ScoresWithNames.sort(key=lambda x: x.split(" - ")[-1])

Образец теста:

>>> ScoresWithNames = ['Ishaan - 72', 'Jack - 84', 'Bob - 23', 'Louis - 77']
>>> ScoresWithNames.sort(key=lambda x: x.split(" - ")[-1])
>>> ScoresWithNames
['Bob - 23', 'Ishaan - 72', 'Louis - 77', 'Jack - 84']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...