2016-04-30 14 views
1

最初、タプルのリストは、2番目の値と3番目の値でソートされます。タプルのリストをソートするためのPythonラムダ関数

tlist = [('a', 1, 14), ('a', 1, 16), ('b', 1, 22), 
     ('a', 2, 1), ('c', 2, 9), ('d', 2, 11), ('d', 2, 12)] 

は、その第3の値によって逆、その第二の値によってソートするタプルのリストを試みます。

tlist= [('b', 1, 22), ('a', 1, 16), ('a', 1, 14), 
     ('d', 2, 12), ('d', 2, 11), ('c', 2, 9), ('a', 2, 1)] 

これは私がこれまでのところ、このanswerに見られるようにしようとしたものです:それは、listの出力がそうのように並べ替えることがしたいです

tlist = sorted(tlist, key=lambda t: return (t[0], t[1], -t[2])) 

が、それは動作しません。 return outside of functionエラーを返します。

希望の出力を得る方法は?

EDIT

このquestionは非常に良いリソースを提供し、おそらくすべての誰かが先に行くと、私の具体的な質問に取り組む必要があるだろう。しかし、低レベルの経験と異なるソート基準(上記の説明を参照)を使用したソートの具体的な例を考えてみると、これは重複しないと思います。

+2

ラムダ式は 'return'ステートメントを必要としません。 –

+0

リスト/タプルのソート(リスト/タプル)の可能な複製?](http://stackoverflow.com/questions/3121979/how-to-sort-list-tuple-of-lists-tuples) – AKS

+0

@ AKSあなたは、あなたが留意した質問と類似している私の質問のポイントを持っています。なぜ私はそれが異なるソート基準のために重複ではないと感じるのかを指摘するために私の質問を編集しました。 –

答えて

4

lambda expressionreturnステートメントを使用しません。したがって、returnキーワードを削除する必要があります。

また、最初にタプルの最初の要素をソートしているようです。

lambda t: (t[1],-t[2]) 

または一緒にそれをすべて置く:

tlist = sorted(tlist, key=lambda t: (t[1],-t[2])) 

これを実行するだけで第二の要素を取り、タイブレーカーとしての三要素の降順使用するためには、ラムダへを書き換える必要がありますpython3は、次のように生成します。

>>> tlist= [('b', 1, 22), ('a', 1, 16), ('a', 1, 14), 
...   ('d', 2, 12), ('d', 2, 11), ('c', 2, 9), ('a', 2, 1)] 
>>> tlist = sorted(tlist, key=lambda t: (t[1],-t[2])) 
>>> list(tlist) 
[('b', 1, 22), ('a', 1, 16), ('a', 1, 14), ('d', 2, 12), ('d', 2, 11), ('c', 2, 9), ('a', 2, 1)] 
+1

まさに私が何を試していたのか、ありがとう。 –

+0

これは重複しています、なぜ答える? –

+0

@ColonelBeauvel:2番目の "error"は重複していないと思います。もしあなたが 'return'ステートメントだけをドロップすると、タプルの最初の要素が第1のソート基準として使われます。 –

関連する問題