Sorting a list with entries of unequal types

Peter Otten __peter__ at web.de
Thu Jan 28 19:35:52 EST 2010


Ben Finney wrote:

> Python 2.6 tells me that, in Python 3, sorting a list with entries of
> incompatible types is not allowed:

> $ python2.6 -3 -c "foo = [1, True, 'green', 4, -27, 15.3]; foo.sort();
> print foo;" -c:1: DeprecationWarning: comparing unequal types not
> supported in 3.x
> [-27, 1, True, 4, 15.300000000000001, 'green']
> =====
> 
> So how should I be sorting a list with entries of “unequal types” such
> that it will work in Python 3?
 
I can't find the relevant part of the 2.6 documentation, but something like

>>> def key(x):
...     t = type(x)
...     t = compat.get(t, t)
...     return t.__name__, id(t), x
...
>>> compat = {bool: float, int: float}
>>> sorted([1, True, 'green', 4, -27, 15.3], key=key)
[-27, 1, True, 4, 15.300000000000001, 'green']

should work.

Peter



More information about the Python-list mailing list