Вот еще одно решение:
list_to_sort = ['1 month', '1 year', '3 months', '3 years', '6 months', 'daily']
list_to_sort = sorted(list_to_sort, key=lambda x: tuple(reversed(x.split())))
print(list_to_sort)
# >> ['daily', '1 month', '3 months', '6 months', '1 year', '3 years']
NB : Это должно работать независимо от количества слов, включая пустые строки.
Пример:
['', 'daily', '2 months 1 day', '3 months', '6 months', '1 year', '3 years']
Обновление : имейте в виду, что числа в ваших строках будут отсортированы как символы, а не как целые числа:
['1', '11', '2', ...]
Если вы хотите избежать этого, строку выше следует изменить на:
list_to_sort = sorted(list_to_sort, key=lambda x: tuple(reversed([float(item) if item.isnumeric() else item for item in x.split()])))