19

I have a list of lists that contains users and scores as follows:

[["user1", 100], ["user2", 234], ["user3", 131]...]

I want to produce a list that sorts the users by score in declining order:

[["user2", 234], ["user3", 131], ["user1", 100]...]

How might I go about doing this kind of sort?

fox
  • 13,408
  • 20
  • 52
  • 81

4 Answers4

23
>>> li = [["user1", 100], ["user2", 234], ["user3", 131]]
>>> 
>>> import operator
>>> 
>>> sorted(li, key=operator.itemgetter(1))   # Ascending order
[['user1', 100], ['user3', 131], ['user2', 234]]

>>> sorted(li, key=operator.itemgetter(1), reverse=True)  # Reverse Sort
[['user2', 234], ['user3', 131], ['user1', 100]]
Rohit Jain
  • 203,151
  • 43
  • 392
  • 509
12

You can custom the sort behaviour by pass a key and reverse. sorted will return a new list. If in-place sort wanted, use list.sort.

>>> a = [["user1", 100], ["user2", 234], ["user3", 131]]
>>> sorted(a, key=lambda x: x[1], reverse=True)
[['user2', 234], ['user3', 131], ['user1', 100]]
zhangyangyu
  • 8,262
  • 2
  • 32
  • 43
7

sorted accept optional key function and reverse parameter.

>>> sorted([["user1", 100], ["user2", 234], ["user3", 131]], key=lambda x: x[1], reverse=True)
[['user2', 234], ['user3', 131], ['user1', 100]]
falsetru
  • 336,967
  • 57
  • 673
  • 597
6
l = [["user1", 100], ["user2", 234], ["user3", 131]]
l.sort(lambda x, y: x[1])
Alex G.P.
  • 8,906
  • 5
  • 42
  • 80