# Sort a list of tuples by 2nd item (integer value)

### Question

I have a list of tuples that looks something like this:

``````[('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
``````

I want to sort this list in ascending order by the integer value inside the tuples. Is it possible?

1
358
5/22/2012 2:54:01 AM

Try using the `key` keyword with `sorted()`.

``````sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)], key=lambda x: x[1])
``````

`key` should be a function that identifies how to retrieve the comparable element from your data structure. In your case, it is the second element of the tuple, so we access `[1]`.

For optimization, see jamylak's response using `itemgetter(1)`, which is essentially a faster version of `lambda x: x[1]`.

555
12/24/2015 12:23:44 PM

``````>>> from operator import itemgetter
>>> data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
>>> sorted(data,key=itemgetter(1))
[('abc', 121), ('abc', 148), ('abc', 221), ('abc', 231)]
``````

IMO using `itemgetter` is more readable in this case than the solution by @cheeken. It is also faster since almost all of the computation will be done on the `c` side (no pun intended) rather than through the use of `lambda`.

``````>python -m timeit -s "from operator import itemgetter; data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]" "sorted(data,key=itemgetter(1))"
1000000 loops, best of 3: 1.22 usec per loop

>python -m timeit -s "data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]" "sorted(data,key=lambda x: x[1])"
1000000 loops, best of 3: 1.4 usec per loop
``````