2017-08-11 67 views
0

當前列表的一個部分:[['Magneto', 0, 'Insignificantly Evil'], ['Mystique', 0, 'Insignificantly Evil'], ['Mr. Sinister', 2, 'Cautiously Evil']]排序列表的部分和另一

我上面的代碼:我可以通過列表的第二列進行排序,但我需要幫助整理如果第二列是相同的,則按第一列排序。所以上面列表的正確順序是。

此列表應首先按數字(從最高到最低)進行排序,並以第一列(詞典)打破關係。

最後名單:

[ 
    ('Mr. Sinister', 2, 'Cautiously Evil'), 
    ('Magneto', 0, 'Insignificantly Evil'), 
    ('Mystique', 0, 'Insignificantly Evil') 
]) 

注意如何只在第一列的部分已按字母順序排序,第一個是2,因此獲得優先權!

請反饋形式或形式的想法。

+0

你會使用比較函數https://stackoverflow.com/questions/12749398/using-a-comparator-function-to-sort – Teo

+0

你可能想清楚哪一列是作者 – bendl

+0

是的,我找到了列表的兩個部分,但我試圖排序只是這兩個部分不是一切。這甚至可能嗎? –

回答

0

我想你會需要,因爲你使用python 3.x將其轉換爲list,但是這將工作:

a = [['Magneto', 0, 'Insignificantly Evil'], ['Mystique', 0, 'Insignificantly Evil'], ['Mr. Sinister', 2, 'Cautiously Evil']] 
sorted(a, key=lambda x: (-x[1], x[0])) 
#[['Mr. Sinister', 2, 'Cautiously Evil'], 
# ['Magneto', 0, 'Insignificantly Evil'], 
# ['Mystique', 0, 'Insignificantly Evil']] 

lambda是一個匿名函數,它的參數x和收益與負第二個元素和第1個要素元組就這樣。

排序將先返回,然後返回元組的第二個元素。

默認排序是遞增的,所以負數將首先排序。

+0

嗨,你能解釋一下lambda部分:你如何排序負x和其他東西一次甚至是什麼fdoes? –

+0

另外你還沒有定義x如何工作? –

+0

也不需要如果其他語句 –