Как отобразить только 5 лучших результатов из моего файла? - PullRequest
0 голосов
/ 19 апреля 2020

Это файл с оценками:

Ishaan - 72
Jack - 84
Bob - 23
Louis - 77
Arnav - 56
Ben - 48
Ted - 39

Пока я отсортировал файл, но не знаю, как отобразить только 5 лучших результатов. из файла.

ScoresFile2 = "/Users/KADAM BOYS/Desktop/Ishaan's Folder/Homework (Year 10)/Computing/Mock Project/Scores.txt"
ScoresWithNames = []
with open(ScoresFile2) as file2:
    for line in file2:
        ScoresWithNames.append(line.strip())
ScoresWithNames.sort(key=lambda x: int(x.split(" - ")[-1]))

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Простой способ получить 5 наивысших баллов - most_common из collections.Counter:

from collections import Counter

with open("data.txt") as f:
    counts = Counter()
    for line in f:
        name, score = line.split(" - ")
        counts[name] += int(score)

    print(counts.most_common(5))

Вывод:

[('Jack', 84), ('Louis', 77), ('Ishaan', 72), ('Arnav', 56), ('Ben', 48)]

Если вы хотите, чтобы ваши результаты были отформатированы обратно в "name - score" формат:

print([f"{name} - {score}" for name, score in counts.most_common(5)])
# ['Jack - 84', 'Louis - 77', 'Ishaan - 72', 'Arnav - 56', 'Ben - 48']
1 голос
/ 19 апреля 2020

Это также имеет тот же ответ, что и ваш предыдущий вопрос, но изменено:

l = ['Ishaan - 72', 'Jack - 84', 'Bob - 23', 'Louis - 77']
[' - '.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]))][:5]

Так что, если ваш отсортированный список list1:

top5 = list1[:5]

Если вы используете лямбду :

ScoresWithNames.sort(key=lambda x: int(x.split(" - ")[-1]),reverse = True)
print(ScoresWithNames[:5])

Теперь, если вы хотите напечатать его с новой строкой, у вас есть два способа:

for i in top5:
    print(i)

или:

print('\n'.join(i for i in top5)) # or scoreswithnames 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...