In Python probeer ik te sorteren op datum met lambda. Ik begrijp mijn foutmelding niet. Het bericht is:
<lambda>() takes exactly 1 argument (2 given)
De regel die ik heb is
a = sorted(a, lambda x: x.modified, reverse=True)
Antwoord 1, autoriteit 100%
Gebruik
a = sorted(a, key=lambda x: x.modified, reverse=True)
# ^^^^
Op Python 2.x neemt de functie sorted
zijn argumenten in deze volgorde:
sorted(iterable, cmp=None, key=None, reverse=False)
dus zonder de key=
, wordt de functie die u doorgeeft beschouwd als een cmp
-functie waarvoor 2 argumenten nodig zijn.
Antwoord 2, autoriteit 8%
lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)
Het wordt als volgt afgedrukt:
[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]
Antwoord 3, autoriteit 2%
Je probeert sleutelfuncties te gebruiken met lambda-functies.
Python en andere talen zoals C# of F# gebruiken lambda-functies.
Ook als het gaat om belangrijke functies en volgens de documentatie
Zowel list.sort()als sorted()hebben een sleutelparameter om
specificeer een functie die moet worden aangeroepen op elk lijstelement voorafgaand aan het maken
vergelijkingen.…
De waarde van de sleutelparameter moet een functie zijn die een enkel argument nodig heeft en een sleutel retourneert om te gebruiken voor sorteerdoeleinden. Deze techniek is snel omdat de toetsfunctie precies één keer wordt aangeroepen voor elk invoerrecord.
Dus, toetsfuncties hebben een parametertoets en deze kan inderdaad een lambda-functie ontvangen.
In Real Pythonstaat een mooi voorbeeld van het gebruik ervan. Stel dat u de volgende lijst heeft
ids = ['id1', 'id100', 'id2', 'id22', 'id3', 'id30']
en de “gehele getallen” wilt doorzoeken. Dan zou je zoiets doen als
sorted_ids = sorted(ids, key=lambda x: int(x[2:])) # Integer sort
en afdrukken zou geven
['id1', 'id2', 'id3', 'id22', 'id30', 'id100']
In jouw specifieke geval hoef je alleen key=
voor lambda te schrijven. Dus je zou het volgende willen gebruiken
a = sorted(a, key=lambda x: x.modified, reverse=True)