2015-05-30 3 views
0

Я хотел бы отсортировать список следующих два критерия в следующем порядке:критерии сортировки - упорядоченная()

  1. числового порядок; затем
  2. В алфавитном порядке.

настоящее время я использую:

from re import search 
my_list = ['nelsonfreire87956423', 'martha34685128', 'gleen34685128', 'polini13452678'] 

first_sort = sorted(my_list, key=lambda x: [x]) 

sorted_list = sorted(
    first_sort, 
    key=lambda x: search(r'\d{8}', x).group() if search(r'\d{8}', x) else [] 
) 
print(sorted_list) 

Что дает желаемого результата:

['polini13452678', 'gleen34685128', 'martha34685128', 'nelsonfreire87956423'] 

Я хотел бы знать, как я могу отсортировать этот список только один sorted вызов. Я имею в виду, как я могу передать несколько критериев до sorted?

+0

Вы знаете, первый сорт просто 'отсортирован (my_list)', верно? Помещение каждого элемента в другой список вообще не имеет никакого значения. – jonrsharpe

+0

Ох ... это правда! –

ответ

1

Функция key может возвращать кортеж, где элементы в каждом положении в корте используются для разрыва связей с элементами в предыдущем положении. Например:

def my_key(s): 
    name, num = search(r'(\D+)(\d+)', s).groups() 
    return int(num), name 

, что приводит к:

>>> my_key('nelsonfreire87956423') 
(87956423, 'nelsonfreire') # i.e. sort on number first, then name 

и поэтому:

>>> sorted(my_list, key=my_key) 
['polini13452678', 'gleen34685128', 'martha34685128', 'nelsonfreire87956423'] 
Смежные вопросы