Cómo ordenar con lambda en Python

Resuelto Niklas Rosencrantz asked hace 14 años • 5 respuestas

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.

Niklas Rosencrantz avatar Sep 22 '10 12:09 Niklas Rosencrantz
Aceptado

Usar

a = sorted(a, key=lambda x: x.modified, reverse=True)
#             ^^^^

En Python 2.x, la sortedfunció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 cmpfunción que toma 2 argumentos.

kennytm avatar Sep 22 '2010 05:09 kennytm
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')]
Trillionaire Sanai avatar Mar 09 '2019 18:03 Trillionaire Sanai