2015-05-30 52 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']