60

I have an array like this:

[['G', 10], ['A', 22], ['S', 1], ['P', 14], ['V', 13], ['T', 7], ['C', 0], ['I', 219]]

I'd like to sort it based on the 2nd element in descending order. An ideal output would be:

[['I', 219], ['A', 22], ['P', 14], ... ]

4 Answers 4

100

list.sort, sorted accept optional key parameter. key function is used to generate comparison key.

>>> sorted(lst, key=lambda x: x[1], reverse=True)
[['I', 219], ['A', 22], ['P', 14], ['V', 13], ['G', 10], ...]

>>> sorted(lst, key=lambda x: -x[1])
[['I', 219], ['A', 22], ['P', 14], ['V', 13], ['G', 10], ...]

>>> import operator
>>> sorted(lst, key=operator.itemgetter(1), reverse=True)
[['I', 219], ['A', 22], ['P', 14], ['V', 13], ['G', 10], ...]
Sign up to request clarification or add additional context in comments.

3 Comments

Too late but Can you explain to me what the lambda function does?
The return value of the lambda will be used as sort key. About lambda itself, please read the python documentation: docs.python.org/3/tutorial/…
is operator.itemgetter(1) faster than lambda?
12

Use itemgetter

from operator import itemgetter
a = [[1, 3, 5], [2, 511, 7], [17, 233, 1]]
a = sorted(a, key=itemgetter(1))

Output :

[[1, 3, 5], [17, 233, 1], [2, 511, 7]]

itemgetter can also be used to sort by multiple subarrays.

Comments

7

Sort the multi-dimensional array in descending order on the basis of 2nd column:

list_name.sort(key=lambda x:x[1],reverse=True)

Comments

1
x= [[8, 9, 7],
    [1, 2, 3],
    [5, 4, 3],
    [4, 5, 6]]
x.sort(cmp=lambda x,y: cmp(x[0],y[0]))
print x

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.