In Python 3 there is no cmp
argument for the sorted
function (nor for list.sort
).
According to the docs, the signature is now sorted(iterable, *, key=None, reverse=False)
, so you have to use a key
function to do a custom sort. The docs suggest:
Use
functools.cmp_to_key()
to convert an old-style cmp function to a key function.
Here’s an example:
>>> def compare(x, y):
... return x[0] - y[0]
...
>>> data = [(4, None), (3, None), (2, None), (1, None)]
>>> from functools import cmp_to_key
>>> sorted(data, key=cmp_to_key(compare))
[(1, None), (2, None), (3, None), (4, None)]
However, your function doesn’t conform to the old cmp
function protocol either, since it returns True
or False
. For your specific situation you can do:
>>> your_key = cmp_to_key(make_comparator(cmpValue))
>>> sorted(data, key=your_key)
[(1, None), (2, None), (3, None), (4, None)]
using the make_comparator
function from @Fred Foo’s answer.