Question about sorted in Python 3.0rc1

josh logan dear.jay.logan at gmail.com
Mon Sep 22 09:55:13 EDT 2008


On Sep 22, 9:29 am, Hrvoje Niksic <hnik... at xemacs.org> wrote:
> josh logan <dear.jay.lo... at gmail.com> writes:
> > sorted(P) # throws TypeError: unorderable types Player() < Player()
>
> > The sorted function works when I define __lt__.
> > I must be misreading the documentation, because I read for the
> > documentation __cmp__ that it is called if none of the other rich
> > comparison functions are defined.
> > Is this a bug in Python 3.0rc1, or am I missing something?
>
> What documentation are you referring to, exactly?  The whole __cmp__
> thing was supposed to be removed from Python 3, so mention of it
> sounds like a documentation bug.
>
> > Secondly, say that we suddenly need another sorting order, where we
> > want to sort by decreasing score and then by DECREASING last name
> > (instead of increasing last name, defined above). Now that the
> > comparison function argument is taken away from the sorted builtin,
> > how do we accomplish this with the "key" parameter?
>
> By calling sort twice on the sequence:
>
> lst.sort(key=lambda x: x.score)
> lst.sort(key=lambda x: x.last_name, reverse=True)
>
> As much as I like the key argument, I believe it was a mistake to
> remove cmp, simply because it was the more general mechanism.
> Emulating cmp with key is possible, but it requires creating a bunch
> of objects for each sort.  (I'm aware that list.sort caches the
> calculated keys, but it still has to create as many of them as there
> are list items.)

It looks like __cmp__ is still in the documentation, and it seems to
work somewhat in Python 3.0rc1. Here is the link to the documnetation
http://docs.python.org/dev/3.0/reference/datamodel.html#object.__cmp__



More information about the Python-list mailing list