In Python, sto cercando di ordinare per data con lambda. Non riesco a capire il mio messaggio di errore. Il messaggio è:
<lambda>() takes exactly 1 argument (2 given)
La linea che ho è
a = sorted(a, lambda x: x.modified, reverse=True)
In Python, sto cercando di ordinare per data con lambda. Non riesco a capire il mio messaggio di errore. Il messaggio è:
<lambda>() takes exactly 1 argument (2 given)
La linea che ho è
a = sorted(a, lambda x: x.modified, reverse=True)
Risposte:
Uso
a = sorted(a, key=lambda x: x.modified, reverse=True)
# ^^^^
Su Python 2.x, la sortedfunzione accetta i suoi argomenti in questo ordine:
sorted(iterable, cmp=None, key=None, reverse=False)
quindi senza il key=, la funzione che passi sarà considerata una cmpfunzione che accetta 2 argomenti.
lambdaun altro parametro dal momento che una cmpfunzione prende 2?
cmp, una funzione di confronto accetta due argomenti. Se non si specifica che si sta passando un key, si presuppone dall'ordine dei parametri della funzione che si sta passando un comparatore. Il tuo lambda accetta un parametro, quindi non è un comparatore valido ed è quello che dice l'errore.
lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)
Stampa come segue:
[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]
Gli elenchi Python hanno due modi integrati per ordinare i dati:
sort() — A method that modifies the list in-place
sorted() — A built-in function that builds a new sorted list from an iterable
In base alle tue esigenze puoi scegliere tra queste due:
se si desidera mantenere l'elenco originale, è possibile utilizzare la funzione di ordinamento o se non è necessario l'elenco originale è possibile utilizzare la funzione di ordinamento.
Prima di procedere con l'ordinamento o l'ordinamento, dobbiamo capire lambda.
Una lambda è una funzione anonima e una funzione anonima è una funzione definita senza nome, questo post sembra spiegarlo abbastanza bene.
https://www.programiz.com/python-programming/anonymous-function
Le funzioni Lambda sono utili per chiamare in linea perché hanno solo un'espressione che viene valutata e restituita. La sintassi per un lambda è:
argomenti lambda: espressione
vediamo come usare la funzione ordinata:
student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2])
output: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Qui possiamo vedere l'elenco student_tuples che ha tuple è ordinato in base al parametro chiave a condizione che sia student [2].