Using s.sort([cmp[, key[, reverse]]]) to sort a list of objects based on a attribute

Marc 'BlackJack' Rintsch bj_666 at gmx.net
Fri Sep 7 10:21:38 EDT 2007


On Fri, 07 Sep 2007 06:57:35 -0700, cjt22 wrote:

> I have a step class and store in a list step instances
> A step instance contains variables: name, startTime etc and startTime
> is stored as a string %H:%M:%S
> 
> What I would like to do is to be able to sort this list of objects
> based on the startTime object so that the first item in the list is
> the object with the earliest Start time and last item is the object
> with the last Start time.
> 
> I belive my key has to be = strpTime(step.sTime, "%H:%M:%S")
> But don't know how to create the comparison funciton.
> 
> Any help on how I can perform this whole operation would be much
> appreciated.

This should be enough::

  steps.sort(key=lambda s: s.startTime)

If you sort strings of the form 'hh:mm:ss' the represented times are
sorted chronological.  No need to convert them to a number first.

If the "natural" sort criterion for `Step` objects is the start time you
might override `__cmp__()` of `Step`\s instead::

    def __cmp__(self, other):
        return cmp(self.startTime, other.startTime)

Now you can just sort the list with ``steps.sort()``.

Ciao,
	Marc 'BlackJack' Rintsch



More information about the Python-list mailing list