2014-09-27 27 views
0

這可能是一個相當簡單的問題 - 但我相對較新的python在我的辯護! 這裏的話 - 我已經加載的CSV文件導入它看起來像這樣的列表:Python:排序多維列表,但尊重內部增量器

["4567", "59.0000", 7.0000", "1"] 
["4567", "59.0000", 7.0000", "2"] 
["4567", "59.0000", 7.0000", "5"] 
["1234", "59.0000", 7.0000", "1"] 
["1234", "59.0000", 7.0000", "2"] 
["1234", "59.0000", 7.0000", "3"] 

的第一列是一個唯一的ID - 其中最後一個是需要保留的順序號(根我的問題)。

我想通過唯一的ID(第一行)排序,但保持序列順序。所以我寧願有這樣的列表

["1234", "59.0000", 7.0000", "1"] 
["1234", "59.0000", 7.0000", "2"] 
["1234", "59.0000", 7.0000", "3"] 
["4567", "59.0000", 7.0000", "1"] 
["4567", "59.0000", 7.0000", "2"] 
["4567", "59.0000", 7.0000", "5"] 

顯然,當我只是在唯一id上排序 - 序列會搞砸。

這是一個簡單的任務嗎?或者我需要在列表中循環兩次?如何做呢?我很無能。謝謝你的時間!

+0

所以問題是:「如何按多個值排序?」 – user2864740 2014-09-27 22:44:07

回答

1

此問題似乎是「如何按多個值排序?」

如果是這樣,請參閱How To: Sorting其中涵蓋了這個和大多數其他情況。基本方法是使用key函數返回返回元組,因爲元組在Python中是可訂購的。

# sort by 1st column, then 4th column (both as integer values) 
sorted(rows, key = lambda r: (int(r[0]), int(r[3])) 

現在,即使有沒有第4列(或者,如果它是順序排並不算重要的第四列的值),我們仍然可以用事實那sorted uses is a stable sort。這意味着對於等價比較的任何項目/行,保留排序。因此,以下具有與第一類相同的結果(對於給定數據):

# sort by 1st column (as integer); preserve the "row order" by stability 
sorted(rows, key = lambda r: int(r[0])) 
+0

'sorted(l,key = lambda x:int(x [0],int [x [3]]))' – 2014-09-27 23:25:56

0

我推薦使用類而不是列表的列表。但是你也可以在你的排序中使用一個鍵(排序比list_.sort()慢)或(暫時)改變你的子列表元素的順序。