Проблема с сортировкой по нескольким критериям в Python - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь отсортировать список, состоящий из имен и оценок:

[['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41.0], ['Harsh', 39.0]]

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

score_list=[]
for _ in range(int(input())):
    name = input()
    score = float(input())
    score_list.append([name, score])

score_list.sort(key = lambda x: (x[1], x[0]), reverse=True)

1 Ответ

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

ИДЕАЛЬНОЕ РЕШЕНИЕ (1-й ответ из этого ответ )

score_list = sorted(score_list,key = lambda x: (-x[1], x[0]))

или (по-моему):

score_list = [j[::-1] for j in sorted([i[::-1] for i in l],key=lambda x: (-x[0],x[1]))]

дает: ваше желание:

[['Akriti', 41.0], ['Harsh', 39.0], ['Berry', 37.21], ['Harry', 37.21], ['Tina', 37.2]]

ПРИМЕРЫ
Вот как вы это делаете:

sort_ list = [j[::-1] for j in sorted([i[::-1] for i in l])]

Это дает:

[['Tina', 37.2], ['Berry', 37.21], ['Harry', 37.21], ['Harsh', 39.0], ['Akriti', 41.0]]

Здесь:

l = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41.0], ['Harsh', 39.0]]

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

sort_ list = [j[::-1] for j in sorted([i[::-1] for i in l],reverse = True)]

Это дает:

[['Akriti', 41.0], ['Harsh', 39.0], ['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...