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

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Giovanni Toffoli

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

    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:


    <<<
    def SortOnItem(myli st, 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 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.
    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.

    Regards, Giovanni Toffoli





  • Bruno Desthuilliers

    #2
    Re: sorting list of tuples by second (third...) tuple item

    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:

    >
    <<<
    def SortOnItem(myli st, 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.itemge tter as the
    'key' argument, it may do the trick.

    Comment

    Working...