Сортировка меток по месяцам с ключом - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь отсортировать «метки времени» по месяцам только .Прямо сейчас код:

arr = ["13-16", "5-15", "9-15", "3-14", "12-19", "11-19", "9'19", "5-14"]
arr = sorted(arr, key=lambda str:(str.split("-")[0]))
print(arr)

Однако, что я получаю, когда печатаю, это:

['11-19', '12-19', '13-16', '3-14', '5-15', '5-14', '9-15', '9-19']

Кто-нибудь знает, почему Python заказывает это неправильно?

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

@ Goldberg , вывод ['3-14', '5-15', '5-14', '9-15', '9-19', '11-19', '12-19', '13-16'] выглядит нормально, но все же он не в правильном порядке, так как правильный ['3-14', '5-14', '5-15', '9-15', '9-19', '11-19', '12-19', '13-16'], который вы можете получить, используя следующий код:

На основе концепции сравнения кортежей:

a = (3, 14)

b = (5, 14)

c = (5, 15)

print (a < b) # True

print (c > b) # True

print (a > c) # False

"Правильный путь (правильный вывод)

arr = sorted(arr, key=lambda str:( int(str.split("-")[0]), int(str.split("-")[1])))
print(arr)
# ['3-14', '5-14', '5-15', '9-15', '9-19', '11-19', '12-19', '13-16']

" Неверный путь (неправильный вывод)

arr = sorted(arr, key=lambda str:( int(str.split("-")[0])))
print(arr)
# ['3-14', '5-15', '5-14', '9-15', '9-19', '11-19', '12-19', '13-16']
0 голосов
/ 03 июня 2018

Вам нужно привести месяц к int, в противном случае ключи сортируются в виде строк, то есть в алфавитном порядке.

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

arr = ["13-16", "5-15", "9-15", "3-14", "12-19", "11-19", "9-19", "5-14"]
arr = sorted(arr, key=lambda s: [int(x) for x in s.split("-")])
#                                ^ cast to an int
print(arr)

Вывод:

['3-14', '5-14', '5-15', '9-15', '9-19', '11-19', '12-19', '13-16']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...