Как отсортировать данный список l
по месяцам ['Jan', 'Feb', 'Mar']
и ['L', 'K']
:списка Сортировать по данному тексту месяцев
l = ['Jan_K', 'Mar_K', 'Feb_L']
Ожидаемый результат должен быть:
result = ['Feb_L', 'Jan_K', 'Mar_K']
Как отсортировать данный список l
по месяцам ['Jan', 'Feb', 'Mar']
и ['L', 'K']
:списка Сортировать по данному тексту месяцев
l = ['Jan_K', 'Mar_K', 'Feb_L']
Ожидаемый результат должен быть:
result = ['Feb_L', 'Jan_K', 'Mar_K']
Вашей попытка списка понимание который фактически ничего не делает, кроме создания нового списка.
Если вы хотите отсортировать список, вы дали использовать .sort()
.
Если вы хотите отсортировать список по определенному пути, вы должны использовать .sort()
с аргументом key
.
Так что, если вы хотите, чтобы первые месяцы прийти первым в списке, начните с создания списка, содержащего порядок этих месяцев:
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
Затем вы можете использовать key
и лямбда-функции, как это :
l.sort(key=lambda x: months.index(x.split('_')[0]))
Например, x.split('_')[0]
дает "Jan"
когда x
является "Jan_opi"
и months.index("Jan")
является 0
поэтому элемент придет первым.
Согласно правки, если вы хотите, чтобы отсортировать список на основе двух критериев, вы просто должны сделать лямбда-функция возвращает кортеж (функция сортировки сравнивает первое значение, возвращенное из двух элементов, и если это то же самое, что и второе).
letters = ['L','K']
final_result = sorted(l, key=lambda x: (letters.index(x.split('_')[1]), months.index(x.split('_')[0])))
@thito Как это могло быть в списке? Это первое значение в списке «месяцев», как вы можете видеть. – Delgan
okok ........... – thito
Это лучший способ продвижения вперед, поскольку вы сами пытаетесь использовать ключ с любым произвольным списком. За полнотой обратите внимание, что вы можете использовать тот же ключ arg с 'sorted' для' sorted (l, key = lambda x: months.index (x.split ('_') [0])) '. –