сортировка списка по целому числу возвращает неправильную сортировку - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь отсортировать список, содержащий в каждом индексе целое число и строку. как в примере.

Я использовал sort() и split, но я всегда получаю неправильный приказ, что я ожидаю

def takeSecond(elem):
    return elem.split("|")[2]
list = ['|val1: 0|0','|val: 0|80','|val1 0|140','|val1: 0|20','|val1: 0|90']
list.sort(key=takeSecond)
print(list)

, который возвращает

['|val1: 0|90','|val: 0|80','|val1: 0|20','|val1: 0|0','|val1 0|140']

и я ожидаю получить это

['|val1: 0|140','|val: 0|90','|val1: 0|80','|val1: 20|0','|val1 0|0']

Подскажите, пожалуйста, в чем здесь моя ошибка.

Спасибо заранее.

1 Ответ

1 голос
/ 13 ноября 2019

Попробуйте это:

l = ['|val1: 0|0','|val: 0|80','|val1 0|140','|val1: 0|20','|val1: 0|90']
l.sort(key=lambda x:int(x.rsplit('|')[-1]), reverse=True)

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

In [18]: l                                                                                                                                                                                                  
Out[18]: ['|val1 0|140', '|val1: 0|90', '|val: 0|80', '|val1: 0|20', '|val1: 0|0']

Кроме того, обратите внимание, что:

Не используйте list в качестве имени переменной. list - это встроенное имя в python, вы переопределяете его функциональность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...