2014-02-12 130 views
2

所以我有一個看起來像這樣的列表:如何根據子列表中的值對列表進行排序?

example = [['b',1],['b',2],['a',2]] 

,它需要進行排序,以成爲:

example = [['b',1],['a',2],['b',2]] 

即按[1]位置中的數字進行數字排序。該程序需要識別何時有兩個相同的數字,然後按字母順序對這些元素進行排序。

任何想法?

編輯:

,我怎麼會去列表進行排序,從而使最高的數字是第一印刷?,即:

example = [['a',2],['b',2],['b',1]] 

回答

3

這是一個巧妙的方法

>>> example = [['b',1],['b',2],['a',2]] 
>>> sorted(example, key=sorted) 
[['b', 1], ['a', 2], ['b', 2]] 

僅適用於Python2雖然


有兩種方式用數字進行排序,從最高最低

>>> sorted(example, key=lambda x: (-x[1], x[0])) 
[['a', 2], ['b', 2], ['b', 1]] 

>>> from operator import itemgetter 
>>> sorted(sorted(example), key=itemgetter(1), reverse=True) 
[['a', 2], ['b', 2], ['b', 1]] 
3
>>> lis = [['b',1],['b',2],['a',2]] 
>>> sorted(lis, key=lambda x:x[::-1]) 
[['b', 1], ['a', 2], ['b', 2]] 

對列表進行排序就地使用lis.sort(...)

+0

在Python 2.x中,我們可以簡單地執行'print(sorted(lis,key = sorted))':) – thefourtheye

5

您可以使用list.sort,其和operator.itemgetter

>>> from operator import itemgetter 
>>> example = [['b',1],['b',2],['a',2]] 
>>> example.sort(key=itemgetter(1,0)) 
>>> example 
[['b', 1], ['a', 2], ['b', 2]] 
>>> 

您還可以使用的,而不是lambdaoperator.itemgetter

example.sort(key=lambda x: (x[1], x[0])) 

但是這將是慢。

+0

你能解釋一下它是如何工作的嗎?比方說,我現在想要從最高的數字到最低的數列(但仍然按照字母順序排列相同數字的元素),你會如何改變這個代碼以允許這樣做? –

+0

@HayleyvanWaas,我在答案中有這樣的例子 –

相關問題