Я думаю, что * если вы уверены, что формат соответствует «[0] алфавит [1] тире», после индексов после [2:] всегда будет число, тогда вы можете заменить split на слайс, или вы можете использовать str.index (' - ')

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

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

Я придумал следующее решение. Но я надеюсь, что есть более краткое решение с помощью Pythoniclambda заявления.

def sorter_func(x):
    text, num = x.split('-')
    return int(num), text

res = sorted(lst, key=sorter_func)

я посмотрел наПонимание поведения вложенных лямбда-функций в python но не смог адаптировать это решение напрямую. Есть ли более лаконичный способ переписать приведенный выше код?

Ответы на вопрос(8)

Ваш ответ на вопрос