2014-04-08 55 views
1

我試圖比較列表,元組等等的東西,我想知道我們如何指定我們想要比較的東西。我想用最後一個數字排序一個列表:[('A',(6,2,1,3)), ('B',(4,5,9,3)), ('C',(1,2,3,8))],如果最後一個數字相等,則按第3個數字排序。但是,我不確定如何解決這個問題。我用lambda按最後一個數字排序,但是當最後一個數字相等時,python自動按第一個數字排序。比較Python中的東西

回答

3

使用lambda,創建一個關鍵是最後一個號碼和第三號的元組:

mylist = [('B',(4,5,9,3)), ('C',(1,2,3,8)), ('A',(6,2,1,3))] 
mylist.sort(key=lambda x:(x[1][-1], x[1][2])) 

輸出:

[('A', (6, 2, 1, 3)), ('B', (4, 5, 9, 3)), ('C', (1, 2, 3, 8))] 
0

你基本上要由每個tuple的最後一個元素進行排序,倒過來。 Python的翻譯英語編寫得很好:

sorted(li,key=lambda x: tuple(reversed(x[-1]))) 
Out[4]: [('A', (6, 2, 1, 3)), ('B', (4, 5, 9, 3)), ('C', (1, 2, 3, 8))] 
+0

從字面上看,OP實際上並沒有說排序第2和第一個元素,但你可能* *右 – mhlester

+0

是啊,我推算了一下。 – roippi

+0

這是沒有理由downvote這個答案。來吧!它仍然是完全有效的! – mhlester