Python - сортировка списка в порядке убывания - ошибка типа - PullRequest
0 голосов
/ 29 сентября 2019

iPod Game Guesser - функция списка лидеров

    leaderboard = open("Score.txt", "a+")
    score = str(score)
    leaderboard.write(Username + ' : ' + score + '\n')
    leaderboard.close()

    leaderboard = open("Score.txt", "r")
    Scorelist = leaderboard.readlines()
    scores = {}
    for row in Scorelist:
        user, score = row.split(':')
        scores[user] = int(score)
        highest_ranking_users = sorted(scores, key=lambda x: scores[x], reverse=True)
    for user in highest_ranking_users:
        print (f'{user} : {score[user]}')

Так что это игра, которую я сделал для своего проекта OCR GCSE, почему-то я получаю ошибки в последней строке моего кода.\\ print (f '{user}: {score [user]}') \\, ошибка отображается следующим образом:

TypeError: строковые индексы должны быть целыми числами

Пожалуйста, помогите!Любые комментарии будут оценены!

1 Ответ

0 голосов
/ 29 сентября 2019

Вы используете тип dict и отсортированы для списка, а не для dict.Чтобы отсортировать диктовку, вы должны использовать список и снова выполнить диктовку или просто использовать список для печати списка с наивысшим баллом.

score = {'Player1' : 9, 'Player2' : 6, 'Player3' : 7, 'Player4' : 8}
sorted_score = sorted(score.items(), key=lambda x: x[1], reverse=True)

for score in sorted_score:
    print('{} : {}'.format(score[0], score[1]))

Это дает результат,

Player1 : 9
Player4 : 8
Player3 : 7
Player2 : 6

Вы можете адаптировать мой код, т.е.

with open("test.txt", "r") as file:
    scores = []
    for row in file.read().splitlines():
        scores.append(row.split(' : '))

sorted_score = sorted(scores, key=lambda x: x[1], reverse=True)

for score in sorted_score:
    print('{} : {}'.format(score[0], score[1]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...