Cómo ordenar con lambda en Python
Estoy intentando ordenar algunos valores por atributo, así:
a = sorted(a, lambda x: x.modified, reverse=True)
Recibo este mensaje de error:
<lambda>() takes exactly 1 argument (2 given)
¿Por qué? ¿Cómo lo soluciono?
Esta pregunta se escribió originalmente para Python 2.x. En 3.x, el mensaje de error será diferente: TypeError: sorted expected 1 argument, got 2
.
Aceptado
Usar
a = sorted(a, key=lambda x: x.modified, reverse=True)
# ^^^^
En Python 2.x, la sorted
función toma sus argumentos en este orden:
sorted(iterable, cmp=None, key=None, reverse=False)
entonces, sin key=
, la función que pase se considerará una cmp
función que toma 2 argumentos.
lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)
Se imprimirá de la siguiente manera:
[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]