💡 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!