Я хочу отсортировать список ниже по числу, а затем по тексту.
lst = ['b-3', 'a-2', 'c-4', 'd-2']
# result:
# ['a-2', 'd-2', 'b-3', 'c-4']
Попытка 1
res = sorted(lst, key=lambda x: (int(x.split('-')[1]), x.split('-')[0]))
Я был недоволен этим, так как потребовалось разделение строки дважды, чтобы извлечь соответствующие компоненты.
Попытка 2
Я придумал решение ниже. Но я надеюсь, что есть более сжатое решение с помощью питоновских заявлений lambda
.
def sorter_func(x):
text, num = x.split('-')
return int(num), text
res = sorted(lst, key=sorter_func)
Я посмотрел на Понимание поведения вложенной лямбда-функции в python, но не смог напрямую адаптировать это решение. Есть ли более краткий способ переписать вышеприведенный код?