[Tutor] sorting objects on two attributes
Kent Johnson
kent37 at tds.net
Mon Mar 3 17:34:35 CET 2008
Chris Fuller wrote:
> You could have a hierarchical sort
> function:
>
> def hiersort(a,b):
> if a.attr1 != b.attr1:
> return cmp(a.attr1, b.attr1)
> else:
> if a.attr2 != b.attr2:
> return cmp(a.attr2, b.attr2)
> else:
> return cmp(a.attr3, b.att3)
>
>
> l.sort(hiersort)
That is exactly what l.sort(key=lambda x: (x.attr1, x.attr2, x.attr3))
does, except the key= version is simpler and most likely faster.
You can also use
l.sort(key=operator.attrgetter('attr1', 'attr2', 'attr3'))
> You can keep nesting for more than three attributes, or you could make it
> arbitrary by setting it up recursively and setting the attribute hierarchy as
> a parameter somewhere. But that's probably unnecessarily fancy.
l.sort(key=operator.attrgetter(*list_of_attribute_names))
should work...
Kent
More information about the Tutor
mailing list