๐ก Python QuickBits โ ๐งฎ Operator Shortcuts (itemgetter > lambda)
Posted on: September 24, 2025
Description:
When sorting collections like lists of dicts, many of us reach for lambda. It worksโbut Pythonโs operator.itemgetter is cleaner, less error-prone, and usually faster, especially in large datasets or tight loops.
๐ Sorting by One Key (Lambda โ itemgetter)
from operator import itemgetter
players = [
{"name": "Ava", "score": 92},
{"name": "Liam", "score": 77},
{"name": "Mila", "score": 92},
{"name": "Noah", "score": 85},
]
# Lambda way (works)
by_score_lambda = sorted(players, key=lambda d: d["score"], reverse=True)
# itemgetter way (cleaner & faster)
by_score_getter = sorted(players, key=itemgetter("score"), reverse=True)
Both give the same result; itemgetter("score") reads like โget the score fieldโ.
๐งฉ Sorting by Multiple Keys (Tie-Breakers)
# Sort by score (desc), then by name (asc) as tie-breaker
by_score_name = sorted(players, key=itemgetter("score", "name"), reverse=True)
With lambdas, youโd write lambda d: (d["score"], d["name"]). itemgetter("score","name") is shorter and avoids typos.
โก Why Prefer itemgetter ?
- Cleaner intent: itemgetter("score") says exactly what it does.
- Fewer typos: No repeated ["key"] strings across lambdas.
- Micro-perf: CPython-level implementation can be slightly faster.
โ Key Points
- Use operator.itemgetter for sorting by dict keys (single or multiple).
- Prefer it over custom lambdas for clarity and maintainability.
- Keep lambdas for custom logic that itemgetter canโt express.
Code Snippet:
from operator import itemgetter # provides a callable to fetch item(s) by key/index
players = [
{"name": "Ava", "score": 92},
{"name": "Liam", "score": 77},
{"name": "Mila", "score": 92},
{"name": "Noah", "score": 85},
]
# Using lambda to sort by score (descending)
by_score_lambda = sorted(players, key=lambda d: d["score"], reverse=True)
# Using itemgetter to sort by score (descending) โ shorter, cleaner
by_score_getter = sorted(players, key=itemgetter("score"), reverse=True)
print("By score (lambda):", by_score_lambda)
print("By score (itemgetter):", by_score_getter)
# Sort by score (desc), then name (asc)
by_score_name = sorted(players, key=itemgetter("score", "name"), reverse=True)
print("By score desc, then name asc:", by_score_name)
# Get the top 2 players by score
top2 = sorted(players, key=itemgetter("score"), reverse=True)[:2]
print("Top 2 by score:", top2)
Link copied!
Comments
Add Your Comment
Comment Added!
No comments yet. Be the first to comment!