2016-09-20 15 views
0

値の2つのドメインを持つクラスがあります。私はそのようなペアのリストを次の基準でソートします:ソート時に複数の変数を持つラムダ関数

  1. 最初のドメインが異なる場合は、最初のドメインで並べ替えます。
  2. それ以外の場合は、2番目のドメインで並べ替えます。

ラムダとの最初のドメインによってのみソートすることは簡単です:私はさらにx.secondを比較したい場合は

sorted(list, key=lambda x:x.first) 

はしかし、どのように私は、ラムダ書くことができます

list.sort(key=lambda x:x.first) 

または

関数?

+0

いくつのバージョンのPythonを使用していますか? –

+0

'first'と' second'の値の種類は何ですか? – Mehdi

答えて

1

tupleにマップしてください!それらが同じである場合、両方のタプルの最初の要素を比較の上に移動し、第二の要素の比較に基づいて結果を決める -

sorted(list, key=lambda x:(x.first, x.second)) 

タプル比較はあなたが望むのと同じ方法で行われます。

PS1:私はx.firstx.secondと比較することができますと仮定しています。このように定義さ__eq__付き整数/文字列、またはオブジェクトとして(タイプのいずれか

PS2:。私はxのクラスに__lt__(..)を実装することをお勧めしたいあなたは文句を言わないソートするコールのためにlambdaに合格する必要があり、そのように。

関連する問題