2016-01-10 9 views
5

することにより、ネストされたリストは、のは、私は以下のようなリストを持っているとしましょう:ソート二つの要素

[['Harry', '4'], ['Anthony', '10'], ['Adam', '7'], ['Joe', '6'], ['Ben', '10']] 
# we can say the first element in it's lists is `name`, the second is `score` 

私はそれを並べ替えたい:スコアで降順に

[['Anthony', '10'], ['Ben', '10'], ['Adam', '7'], ['Joe', '6'], ['Harry', '4']] 

だから、最初の並べ替えをし、それを昇順でソートします。

私が試した

>>> sorted(l, key=lambda x: (int(x[1]), x[0])) 
[['Harry', '4'], ['Joe', '6'], ['Adam', '7'], ['Anthony', '10'], ['Ben', '10']] 

それは働いているので、今、私はちょうどそれを逆必要があります。

>>> sorted(l, key=lambda x: (int(x[1]), x[0]), reverse=True) 
[['Ben', '10'], ['Anthony', '10'], ['Adam', '7'], ['Joe', '6'], ['Harry', '4']] 

ああ、reverse=Trueは、単にリストを逆転させたが、与えませんでした出力を期待する。だから私はちょうどint(x[1])の出力を逆にしたいが、x[0]は出力しない。

どうすればいいですか?

答えて

6
>>> sorted(l, key=lambda x: (-int(x[1]), x[0])) 
[['Anthony', '10'], ['Ben', '10'], ['Adam', '7'], ['Joe', '6'], ['Harry', '4']] 

基本的には、キーのスコア部の符号を変更することで、ソートキーは次のようになります。

(-10, 'Anthony'), 
(-10, 'Ben'), 
(-7, 'Adam'), 
(-6, 'Joe'), 
(-4, 'Harry') 

だから、(a, b) < (c, d) <=> (a < c) or (a == c and b < d)で、ご希望のソート順で終わります。