Mar 1, 2025
Good advice, but it doesn't go far enough.
defaultdict is almost always a mistake, because it's a potential trap.
You create fill up a defaultdict and then pass it to someone else who thinks it's a dict because it is in fact an instance of dict, but surprise!, instead of getting a KeyError when an element doesn't exist, a new error is created.
Instead, use dict.setdefault.
For example, to invert a dictionary:
d: dict[str, Any]
result: dict[Any, list[str]] = {}
for k, v in d.items():
result.setdefault(v, []).append(k)Decent article, expect claps!
