No Python, estou tentando classificar por data com o lambda. Não consigo entender minha mensagem de erro. A mensagem é:
<lambda>() takes exactly 1 argument (2 given)
A linha que tenho é
a = sorted(a, lambda x: x.modified, reverse=True)
No Python, estou tentando classificar por data com o lambda. Não consigo entender minha mensagem de erro. A mensagem é:
<lambda>() takes exactly 1 argument (2 given)
A linha que tenho é
a = sorted(a, lambda x: x.modified, reverse=True)
Respostas:
Usar
a = sorted(a, key=lambda x: x.modified, reverse=True)
# ^^^^
No Python 2.x, a sorted
função recebe seus argumentos nesta ordem:
sorted(iterable, cmp=None, key=None, reverse=False)
portanto, sem o key=
, a função que você passar será considerada uma cmp
função que recebe 2 argumentos.
lambda
outro parâmetro, já que uma cmp
função leva 2?
cmp
, uma função comparadora usa dois argumentos. Se você não especificar que está passando a key
, assume-se da ordem dos parâmetros de função que está passando um comparador. Seu lambda usa um parâmetro, portanto, não é um comparador válido e é isso que o erro diz.
lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)
Ele será impresso da seguinte maneira:
[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]
As listas Python têm duas maneiras internas de classificar dados:
sort() — A method that modifies the list in-place
sorted() — A built-in function that builds a new sorted list from an iterable
Com base nos seus requisitos, você pode escolher entre estes dois:
se você deseja manter a lista original, pode usar a função classificada ou, se não precisar da lista original, pode usar a função classificação.
Antes de prosseguir ou ordenar, precisamos entender lambda.
Um lambda é uma função anônima e uma função anônima é uma função definida sem nome, este post parece explicar muito bem.
https://www.programiz.com/python-programming/anonymous-function
As funções do Lambda são boas para chamar in-line, porque elas possuem apenas uma expressão que é avaliada e retornada. A sintaxe para uma lambda é:
argumentos lambda: expressão
vamos ver como usar a função classificada:
student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2])
saída: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Aqui podemos ver a lista student_tuples com tuplas é classificada com base no parâmetro-chave, desde que seja aluno [2].