josh logan <[EMAIL PROTECTED]> 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.)
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to