In this tutorial, we will cover how to use lambda functions as a key for sorting lists in Python. The sorted
function and the list.sort
method both have an optional key
parameter that allows you to specify a function to be called on each list element prior to making comparisons.
Introduction to Lambda Functions
Lambda functions are anonymous functions, meaning they can be defined without a name. They are used to define small, one-time-use functions. The syntax for lambda functions is lambda arguments: expression
. For example:
double = lambda x: x * 2
print(double(5)) # Outputs: 10
Using Lambda Functions as a Key for Sorting
When using the sorted
function or the list.sort
method, you can pass a lambda function as the key
argument. This lambda function should take one argument (the list element) and return a value that will be used for sorting purposes.
For example, let’s say we have a list of tuples containing names and ages, and we want to sort it by age:
people = [('John', 25), ('Alice', 30), ('Bob', 20)]
sorted_people = sorted(people, key=lambda x: x[1])
print(sorted_people) # Outputs: [('Bob', 20), ('John', 25), ('Alice', 30)]
In this example, the lambda function lambda x: x[1]
takes each tuple as an argument and returns the age (the second element of the tuple). The sorted
function then uses these ages to sort the list.
Sorting by Multiple Criteria
You can also use a lambda function to sort by multiple criteria. To do this, you return a tuple from the lambda function, where each element of the tuple is a criterion for sorting:
people = [('John', 25), ('Alice', 30), ('Bob', 20), ('Charlie', 25)]
sorted_people = sorted(people, key=lambda x: (x[1], x[0]))
print(sorted_people) # Outputs: [('Bob', 20), ('Charlie', 25), ('John', 25), ('Alice', 30)]
In this example, the lambda function lambda x: (x[1], x[0])
returns a tuple containing the age and name. The sorted
function first sorts by age, and then by name for people with the same age.
Reversing the Sort Order
To sort in reverse order, you can pass the reverse=True
argument to the sorted
function or the list.sort
method:
people = [('John', 25), ('Alice', 30), ('Bob', 20)]
sorted_people = sorted(people, key=lambda x: x[1], reverse=True)
print(sorted_people) # Outputs: [('Alice', 30), ('John', 25), ('Bob', 20)]
Example Use Cases
Here are some example use cases for using lambda functions as a key for sorting:
# Sort a list of strings by length and then alphabetically
words = ['hello', 'world', 'abc', 'def']
sorted_words = sorted(words, key=lambda x: (len(x), x))
print(sorted_words) # Outputs: ['abc', 'def', 'hello', 'world']
# Sort a list of integers in descending order
numbers = [3, 1, 2, 4]
sorted_numbers = sorted(numbers, key=lambda x: -x)
print(sorted_numbers) # Outputs: [4, 3, 2, 1]
# Sort a list of dictionaries by value and then by key
dicts = [{'a': 1}, {'b': 2}, {'c': 1}, {'d': 3}]
sorted_dicts = sorted(dicts, key=lambda x: (list(x.values())[0], list(x.keys())[0]))
print(sorted_dicts) # Outputs: [{'a': 1}, {'c': 1}, {'b': 2}, {'d': 3}]
Conclusion
Using lambda functions as a key for sorting in Python provides a concise and flexible way to sort lists. By returning a value or a tuple of values from the lambda function, you can sort by one or multiple criteria. The reverse=True
argument allows you to reverse the sort order.