Python3: Using sorted(key=...)

MRAB python at mrabarnett.plus.com
Fri Aug 7 03:33:27 CEST 2009


Johannes Bauer wrote:
> Hello list,
> 
> I'm having trouble with a incredibly simple sort of a list containing
> ints and tuples:
> 
> def myorder(x):
> 	if type(x) == int:
> 		return x
> 	else:
> 		return x[0]
> 
> odata = sorted([ (a, b) for (a, b) in data["description"].items() ],
> key=myorder)
> 
You're sorting a list of tuples (key/value pairs), so 'myorder' is
always given a tuple.

> still says:
> 
> Traceback (most recent call last):
>   File "./genproto.py", line 81, in <module>
>     odata = sorted([ (a, b) for (a, b) in data["description"].items() ],
> key=myorder)
> TypeError: unorderable types: tuple() < int()
> 
> Why is that? Am I missing something very obvious?
> 
Are some keys 'int' and others 'tuple'? In Python 3.x you can't compare
them except for equality:


Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit 
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
 >>> (1, ) < 1
False


Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit 
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
 >>> (1, ) < 1
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
TypeError: unorderable types: tuple() < int()



More information about the Python-list mailing list