Hoe te sorteren met lambda in Python

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 sortedzijn 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)

Other episodes