2013-04-29 46 views
0
a=[(' ', '000'), ('\n', '001000'), ('v', '00100100'), ('O', '0010010100'),('e', '110'), ('n', '1110'), ('r', '1111')] 

我想先按照數字的長度對列表進行排序,然後再按照具有相同長度數字的所有字符的字母順序對列表進行排序。我試圖按循環排序,但它只是排序我的長度的數字,而不是按字母順序。在Python中排序列表的問題

a=[(' ', '000'), ('\n', '001000'), ('v', '00100100'), ('O', '0010010100'),('e', '110'), ('n', '1110'), ('r', '1111')] 
for i in range (len(a)): 
    for j in range(1,len(a)): 
     if len(a[i][1])>len(a[j][1]): 
      swap = a[i] 
      a[i]=a[j] 
      a[j]=swap 

有沒有人有任何想法?在此先感謝

+0

這是一類? Python有一些內置的排序方法。 – squiguy 2013-04-29 06:02:29

回答

4

使用key參數sort

a.sort(key=lambda item: (len(item[1]), item[0])) 

或者更冗長:

def sort_func(item): 
    return len(item[1]), item[0] 

a.sort(key=sort_func) 
+0

哇謝謝你能解釋我更多如何工作PLZ ?? – 2013-04-29 06:06:29

+0

@TommyNgo:看看更詳細的寫作方式是否有幫助。 – Blender 2013-04-29 06:08:04

+0

可以解釋key = sort_func如何使它工作嗎? – 2013-04-29 06:17:24