Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sorting a tuple that contains tuples

I have the following tuple, which contains tuples:

MY_TUPLE = (
    ('A','Apple'),
    ('C','Carrot'),
    ('B','Banana'),
)

I'd like to sort this tuple based upon the second value contained in inner-tuples (i.e., sort Apple, Carrot, Banana rather than A, B, C).

Any thoughts?

like image 759
Huuuze Avatar asked Oct 21 '08 17:10

Huuuze


2 Answers

from operator import itemgetter

MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=itemgetter(1)))

or without itemgetter:

MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=lambda item: item[1]))
like image 73
Markus Jarderot Avatar answered Oct 21 '22 00:10

Markus Jarderot


From Sorting Mini-HOW TO

Often there's a built-in that will match your needs, such as str.lower(). The operator module contains a number of functions useful for this purpose. For example, you can sort tuples based on their second element using operator.itemgetter():

>>> import operator 
>>> L = [('c', 2), ('d', 1), ('a', 4), ('b', 3)]
>>> map(operator.itemgetter(0), L)
['c', 'd', 'a', 'b']
>>> map(operator.itemgetter(1), L)
[2, 1, 4, 3]
>>> sorted(L, key=operator.itemgetter(1))
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]

Hope this helps.

like image 34
mwilliams Avatar answered Oct 21 '22 01:10

mwilliams