jordan112
jordan112

Reputation: 11

How to sort list of lists by highest number?

This is my list:

[['Alfred Jeffries', '9'], ['Peter Smalls', '10'], ['Bob Daniels', '8']]

I want to sort this numerically, highest to lowest.

Expected outcome:

[['Peter Smalls', '10'], ['Alfred Jeffries', '9'], ['Bob Daniels', '8']]

Thanks!

Upvotes: 1

Views: 2647

Answers (2)

Ajay
Ajay

Reputation: 5347

This question has already got an elegant answer but i wanted to do it with itemgetter.

If the list had numbers instead of strings('9','8','10') it would be far easier

 In [7]: a=[['Alfred Jeffries', 9], ['Peter Smalls', 10], ['Bob Daniels', 8]]

In [8]: sorted(a,key=itemgetter(1), reverse=True)
Out[8]: [['Peter Smalls', 10], ['Alfred Jeffries', 9], ['Bob Daniels', 8]]

Since there are strings i need to use list comprehension.

from operator import itemgetter
a=[['Alfred Jeffries', '9'], ['Peter Smalls', '10'], ['Bob Daniels', '8']]

k=[[i[0],str(i[1])] for i in sorted([[elem[0],int(elem[1])] for elem in a],key=itemgetter(1), reverse=True)]

Output

 [['Peter Smalls', '10'], ['Alfred Jeffries', '9'], ['Bob Daniels', '8']]

Upvotes: 2

BioGeek
BioGeek

Reputation: 22827

Use key to specify a function of one argument that is used to extract a comparison key from each list element. The argument reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.

>>> l = [['Alfred Jeffries', '9'], ['Peter Smalls', '10'], ['Bob Daniels', '8']]
>>> sorted(l, key=lambda x: int(x[1]), reverse=True)
[['Peter Smalls', '10'], ['Alfred Jeffries', '9'], ['Bob Daniels', '8']]

Upvotes: 8

Related Questions