2015-11-17 3 views

ответ

2

Вашей попытка списка понимание который фактически ничего не делает, кроме создания нового списка.

Если вы хотите отсортировать список, вы дали использовать .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]))) 
+0

@thito Как это могло быть в списке? Это первое значение в списке «месяцев», как вы можете видеть. – Delgan

+0

okok ........... – thito

+0

Это лучший способ продвижения вперед, поскольку вы сами пытаетесь использовать ключ с любым произвольным списком. За полнотой обратите внимание, что вы можете использовать тот же ключ arg с 'sorted' для' sorted (l, key = lambda x: months.index (x.split ('_') [0])) '. –

Смежные вопросы