2015-05-30 3 views
2

Как мне сделать следующий вид?Сортировка (предметы, лямбда) с несколькими товарами, одна обратная

import re 
list_of_strings=['hulu_delta_20150528.xml', 'hulu_delta_20150524', 
       'playstation_full_20150529', 'hulu_full_20150528.xml'] 
sorted(list_of_strings, key=lambda x: (
    x[:3], 
    re.search(r'\d{8}',x).group() if re.search(r'\d{8}',x) else None, 
    -x # How would this be done as a third criteria? 
)) 

Специально, как бы я сортировал элемент по алфавиту в обратном порядке в качестве третьего критерия? Конечный результат должен быть:

['hulu_delta_20150524', 'hulu_full_20150528.xml', 'hulu_delta_20150528.xml', 'playstation_full_20150529'] 
+1

Пожалуйста, пост воспроизводимого примера. Дайте нам примерный список 'ftp.nlst()', даже если вы просто заработаете. – smci

+0

Сортируйте дважды, второй раз с помощью только 'x' и' reverse = True'. –

+0

@AshwiniChaudhary, как это сделать? – David542

ответ

3

Вы можете сравнить отрицательное порядковое значение элементов, чтобы сравнить их обратными алфавитный порядок:

# All hulu strings have same date 
>>> list_of_strings=['hulu_delta_20150528.xml', 'hulu_delta_20150524', 
        'playstation_full_20150529', 'hulu_full_20150528.xml'] 
>>> files = sorted(list_of_strings, key=lambda x: (
    x[:3], 
    re.search(r'\d{8}',x).group() if re.search(r'\d{8}', x) else None, 
    [-ord(c) for c in x] 
)) 
>>> files 
['hulu_delta_20150524', 'hulu_full_20150528.xml', 'hulu_delta_20150528.xml', 'playstation_full_20150529'] 
Смежные вопросы