sorting – How to sort with lambda in Python

sorting – How to sort with lambda in Python

Use

a = sorted(a, key=lambda x: x.modified, reverse=True)
#             ^^^^

On Python 2.x, the sorted function takes its arguments in this order:

sorted(iterable, cmp=None, key=None, reverse=False)

so without the key=, the function you pass in will be considered a cmp function which takes 2 arguments.

lst = [(candy,30,100), (apple,10,200), (baby,20,300)]
lst.sort(key=lambda x:x[1])
print(lst)

It will print as following:

[(apple, 10, 200), (baby, 20, 300), (candy, 30, 100)]

sorting – How to sort with lambda in Python

Youre trying to use key functions with lambda functions.

Python and other languages like C# or F# use lambda functions.

Also, when it comes to key functions and according to the documentation

Both list.sort() and sorted() have a key parameter to
specify a function to be called on each list element prior to making
comparisons.

The value of the key parameter should be a function that takes a single argument and returns a key to use for sorting purposes. This technique is fast because the key function is called exactly once for each input record.

So, key functions have a parameter key and it can indeed receive a lambda function.

In Real Python theres a nice example of its usage. Lets say you have the following list

ids = [id1, id100, id2, id22, id3, id30]

and want to sort through its integers. Then, youd do something like

sorted_ids = sorted(ids, key=lambda x: int(x[2:])) # Integer sort

and printing it would give

[id1, id2, id3, id22, id30, id100]

In your particular case, youre only missing to write key= before lambda. So, youd want to use the following

a = sorted(a, key=lambda x: x.modified, reverse=True)

Leave a Reply

Your email address will not be published. Required fields are marked *