2013-11-25 148 views
15

有沒有辦法使用sort()方法或任何其他方法按列排序列表?可以說我有名單:如何按列排序多維數組?

[ 
[John,2], 
[Jim,9], 
[Jason,1] 
] 

,我想整理它,使它看起來像這樣:

[ 
[Jason,1], 
[John,2], 
[Jim,9], 
] 

什麼是做到這一點的最好辦法?

編輯:

現在我正在運行一個索引超出範圍的錯誤。我有一個2維數組,可以說1000行b 3列。我想根據第三列進行分類。這是正確的代碼嗎?

sorted_list = sorted(list_not_sorted, key=lambda x:x[2]) 
+0

請參閱:http:// stackoverflow。com/questions/2828059/sorting-arrays-in-numpy-by-column – duhaime

+0

現在我正在運行一個超出範圍錯誤的索引。我有一個2維數組,可以說1000行b 3列。我想根據第三列進行分類。這是正確的代碼嗎? sorted_list = sorted(list_not_sorted,key = lambda x:x [2]) –

+0

爲了響應您的編輯,由於列表是零索引,所以x [2]是第三列。故事的寓意是,你可以使用一個鍵和lambda或一個實際的函數按''sorted'和'sort'函數中的某些規定進行排序。 – squiguy

回答

22

是的。該sorted內置接受key說法:

sorted(li,key=lambda x: x[1]) 
Out[31]: [['Jason', 1], ['John', 2], ['Jim', 9]] 

注意sorted返回一個新的列表。如果要在原地進行排序,請使用列表中的.sort方法(也可以方便地接受key參數)。

或可選地,

from operator import itemgetter 
sorted(li,key=itemgetter(1)) 
Out[33]: [['Jason', 1], ['John', 2], ['Jim', 9]] 

Read more on the python wiki

+0

可能要提及的是,這將返回一個新的列表。 – iCodez

+1

確實。如果你想修改原來的列表,那就是'li.sort(key = whatever)'。 – user2357112

6

您可以通過鍵使用排序後的方法。

sorted(a, key=lambda x : x[1]) 
0

您可以使用list.sort其可選key parameterlambda expression

>>> lst = [ 
...  ['John',2], 
...  ['Jim',9], 
...  ['Jason',1] 
... ] 
>>> lst.sort(key=lambda x:x[1]) 
>>> lst 
[['Jason', 1], ['John', 2], ['Jim', 9]] 
>>> 

這將排序就地列表。


注意,對於大名單,這將是更快地使用的operator.itemgetter代替lambda

>>> from operator import itemgetter 
>>> lst = [ 
...  ['John',2], 
...  ['Jim',9], 
...  ['Jason',1] 
... ] 
>>> lst.sort(key=itemgetter(1)) 
>>> lst 
[['Jason', 1], ['John', 2], ['Jim', 9]] 
>>> 
+0

「lambda」鍵究竟是什麼? –

+0

@ user3024130 - 'lambda'爲'key'參數創建一個內聯函數。我添加了一個鏈接來更好地解釋。使用'lambda'與'def func(x):return x [1]'然後是'lst.sort(key = func)'沒有區別。 – iCodez

+0

好吧,這是有道理的。你會如何從高到低排序而不是從低到高? –

0

可選key參數sort/sorted是一個函數。該函數被調用爲每個項目和返回值確定排序

>>> lst = [['John', 2], ['Jim', 9], ['Jason', 1]] 
>>> def my_key_func(item): 
...  print("The key for {} is {}".format(item, item[1])) 
...  return item[1] 
... 
>>> sorted(lst, key=my_key_func) 
The key for ['John', 2] is 2 
The key for ['Jim', 9] is 9 
The key for ['Jason', 1] is 1 
[['Jason', 1], ['John', 2], ['Jim', 9]] 

採取print出功能的順序離開

>>> def my_key_func(item): 
...  return item[1] 

這個功能是很簡單的寫上「內聯」爲lambda函數

>>> sorted(lst, key=lambda item: item[1]) 
[['Jason', 1], ['John', 2], ['Jim', 9]] 
0
sorted(list, key=lambda x: x[1]) 

注:這適用於時間變量太。