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 sorted
funzione 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 cmp
funzione che accetta 2 argomenti.
lambda
un altro parametro dal momento che una cmp
funzione 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].