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