En Python, estoy tratando de ordenar por fecha con lambda. No puedo entender mi mensaje de error. El mensaje es:
<lambda>() takes exactly 1 argument (2 given)
La linea que tengo es
a = sorted(a, lambda x: x.modified, reverse=True)
En Python, estoy tratando de ordenar por fecha con lambda. No puedo entender mi mensaje de error. El mensaje es:
<lambda>() takes exactly 1 argument (2 given)
La linea que tengo es
a = sorted(a, lambda x: x.modified, reverse=True)
Respuestas:
Utilizar
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)
así que sin la key=
función que pases se considerará una cmp
función que toma 2 argumentos.
lambda
otro parámetro ya que una cmp
función toma 2?
cmp
, una función de comparación toma dos argumentos. Si no especifica que está pasando un a key
, se asume por el orden de los parámetros de función que está pasando un comparador. Su lambda toma un parámetro, por lo tanto, no es un comparador válido y eso es lo que dice el error.
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')]
Las listas de Python tienen dos formas integradas de ordenar datos:
sort() — A method that modifies the list in-place
sorted() — A built-in function that builds a new sorted list from an iterable
Según sus requisitos, puede elegir entre estos dos:
si desea mantener la lista original, puede usar la función ordenada o si no necesita la lista original, puede usar la función ordenar.
Antes de continuar ordenado o ordenado, necesitamos entender lambda.
Una lambda es una función anónima y una función anónima es una función que se define sin nombre, esta publicación parece explicarlo muy bien.
https://www.programiz.com/python-programming/anonymous-function
Las funciones Lambda son buenas para llamar en línea porque solo tienen una expresión que se evalúa y devuelve. La sintaxis de una lambda es:
argumentos lambda: expresión
veamos cómo usar la función ordenada:
student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2])
salida: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Aquí podemos ver que la lista student_tuples que tiene tuplas está ordenada según el parámetro clave siempre que sea student [2].