21

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?

Trenton McKinney
  • 56,955
  • 33
  • 144
  • 158
fox
  • 15,428
  • 20
  • 55
  • 85

4 Answers4

25
>>> 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
  • 209,639
  • 45
  • 409
  • 525
15

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,520
  • 2
  • 33
  • 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
  • 357,413
  • 63
  • 732
  • 636
7
l = [["user1", 100], ["user2", 234], ["user3", 131]]
l.sort(lambda x, y: x[1])
Alex G.P.
  • 9,609
  • 6
  • 46
  • 81