Trouble sorting a list of objects by attributes

rdmurray at bitdance.com rdmurray at bitdance.com
Fri Feb 6 15:58:10 EST 2009


Quoth Robocop <bthayre at physics.ucsd.edu>:
> Hello again,
> I've found myself stumped when trying to organize this list of
> objects.  The objects in question are timesheets which i'd like to
> sort by four attributes:
> 
> class TimeSheet:
>   department = string
>   engagement = string
>   date = datetime.date
>   stare_hour = datetime.time
> 
> My ultimate goal is to have a list of this timesheet objects which are
> first sorted by departments, then within each department block of the
> list, have it organized by projects.  Within each project block i
> finally want them sorted chronologically by date and time.
> 
> To sort the strings i tried:
> 
> timesheets.sort(key=operator.attrgetter('string'))
> 
> which is not doing anything to my list unfortunately; it leaves it
> untouched.

    Python 2.6.1 (r261:67515, Jan  7 2009, 17:09:13) 
    [GCC 4.3.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> class Timesheet(object):
    ...     def __init__(self, department): self.department=department
    ...     def __repr__(self): return "Timesheet(%s)" % self.department
    ... 
    >>> timesheets = [Timesheet('abc'), Timesheet('def'), Timesheet('acd')]
    >>> timesheets
    [Timesheet(abc), Timesheet(def), Timesheet(acd)]
    >>> import operator
    >>> timesheets.sort(key=operator.attrgetter('department'))
    >>> timesheets
    [Timesheet(abc), Timesheet(acd), Timesheet(def)]

The key bit here being the argument to attrgetter, which is the name
of the attribute to use as they key.

--RDM




More information about the Python-list mailing list