How to sort a list by a key in Python
· 2 min read · Updated March 16, 2026 · beginner
python lists sorting
Use the key parameter to define custom sorting logic. Both sorted() and list.sort() support it.
Basic: sort by string length
words = ["apple", "pie", "banana", "cat"]
sorted_words = sorted(words, key=len)
print(sorted_words) # ['pie', 'cat', 'apple', 'banana']
key=len tells Python to use each string’s length for comparison.
Sort a list of dictionaries
users = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25},
{"name": "Carol", "age": 35}
]
sorted_users = sorted(users, key=lambda x: x["age"])
The lambda extracts the value to sort by.
Sort in descending order
Add reverse=True:
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_desc = sorted(numbers, reverse=True)
print(sorted_desc) # [9, 6, 5, 4, 3, 2, 1, 1]
Using itemgetter for better performance
For large datasets or frequent sorts, operator.itemgetter is faster than lambdas:
from operator import itemgetter
users = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25}
]
sorted_users = sorted(users, key=itemgetter("age"))
Sort by multiple keys
Chain the keys:
data = [
{"name": "Alice", "dept": "sales"},
{"name": "Bob", "dept": "engineering"},
{"name": "Carol", "dept": "sales"}
]
sorted_data = sorted(data, key=lambda x: (x["dept"], x["name"]))
In-place sort with .sort()
Modify the original list without creating a new one:
numbers = [3, 1, 4, 1, 5]
numbers.sort(key=lambda x: -x) # Now [5, 4, 3, 1, 1]
Common mistake
Forgetting that .sort() returns None:
# Wrong - this assigns None to numbers
numbers = [3, 1, 4]
numbers = numbers.sort(key=len) # numbers is now None
# Correct - use .sort() for in-place, sorted() for new list
numbers.sort(key=len) # modifies numbers in place
See Also
- list.sort() — in-place list sorting
- sorted() — returns a new sorted list