2011-05-20 10 views
5

私は次の形式でリストのリストを持っている:pythonのサブリストの値をチェックしてリストをソートする方法は?

[['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10]], ['e',[5,1,-1]]] 

は、私が最初の要素にマッチする、数値のリスト要素を使用してpythonで効率的な方法であれば並べ替えしたいと思い、それが同じであるとき、 2番目を使用するなど。

['a',[10]] 
['c',[5,10]] 
['e',[5,1,-1]] 
['d',[5,1,-10] 
['b',[1]] 

ありがとう: 結果は(私が順番にこの時間を逆に必要な)のようなものになるだろう!

+1

これは再帰とは関係ありません。したがって、 –

答えて

5

は、私はあなたが望むように反転した場合のリストは、デフォルトでは、比較と思う:

>>> data = [['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10]], ['e',[5,1,-1]] 
>>> sorted(data, reverse = True, key = lambda pair: pair[1]) 
[['a', [10]], ['c', [5, 10]], ['e', [5, 1, -1]], ['d', [5, 1, -10]], ['b', [1]]] 

あなたは、それは上記のコードで修正されていますあなたの入力リストでブラケティングエラーが発生しました。

+0

+1それに。 '' sorted() ''は新しいリストを返します。既存のリストをインプレースで変更したいのであれば、 '' data.sort(reverse = True、key = lambda pair:pair [1]) ''と同じ引数をとる '' sort() '' 。 – Blair

+0

Ha!それがデフォルトで起こることを知ってうれしい。私は自分自身でそれを行う方法を理解しようとしていた:) –

0

使用key方向を変更するには、リストの2番目の要素を選択し、reverseする:

>>> l=[['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10], ['e',[5,1,-1]]] 
>>> sorted(l, key=lambda e:e[1], reverse=True) 
[['a', [10]], ['c', [5, 10]], ['e', [5, 1, -1]], ['d', [5, 1, -10]], ['b', [1]]] 

リストは、単に語彙や通常の辞書のように、順番にその要素を比較することにより、ソートされています。それは「字句比較」と呼ばれています。

1
>>> from operator import itemgetter 
>>> L=[['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10]], ['e',[5,1,-1]]] 
>>> sorted(L, key=itemgetter(1), reverse=True) 
[['a', [10]], ['c', [5, 10]], ['e', [5, 1, -1]], ['d', [5, 1, -10]], ['b', [1]]] 
>>> 

ここでitemgetter(1)を使用します。これは他の回答のラムダ関数とおおよそ同等です。これは、アイテム番号1であるため、キーがサブリストであるソートを効果的に実行します(アイテム番号0は文字aeです)。