sorting list of tuples by second (third...) tuple item

Bruno Desthuilliers bdesth.quelquechose at free.quelquepart.fr
Fri Feb 16 16:38:46 EST 2007


Giovanni Toffoli a écrit :
> Hi,
> 
> I'm not in the mailing list.
> By Googling, I stepped into this an old post: (Thu Feb 14 20:40:08 CET 
> 2002) of Jeff Shannon:
> http://mail.python.org/pipermail/python-list/2002-February/128438.html
> 
> <<<
> def SortOnItem(mylist, index):
>    templist = [ (line[index], line) for line in mylist ]
>    templist.sort()
>    return [ line[1:] for line in templist ]
> 
> What this does is build a separate list containing a tuple of the
> element that you want to sort on, and the entire line, sorts that
> list (by the first element, of course), and then strips that first
> element off ..

It's the "decorate/sort/undecorate" pattern. You may also google for 
"schwarzian transform"

>>>>
> 
> It seems to me that the tuples aren't sorted only by the first element 
> but, I suppose, other elements are also used if needed to discriminate.

Yes. When compared, tuples first compare on the first element, then on 
the second etc...

> In some cases I got some exceptions when an element of the tuple, other 
> than the first, didn't admit comparison.
> In these cases I had to use an ad hoc comparison function.

Did you try the sorted() function ? Used with operator.itemgetter as the 
'key' argument, it may do the trick.



More information about the Python-list mailing list