Did you know? Since Python 3.7, the built-in
1 | dict |
type officially preserves the order in which keys are inserted. Before that, if you needed ordering guarantees you had to reach for
1 | collections.OrderedDict |
. Today, a plain dictionary is enough for most cases.
Here’s a small demonstration:
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Keys stay in the order they were added user = {} user["name"] = "Ada" user["role"] = "Author" user["joined"] = 2026 for key, value in user.items(): print(f"{key}: {value}") # Output: # name: Ada # role: Author # joined: 2026 |
This also means dictionary comprehensions and merges keep a predictable order, which is surprisingly useful when serializing to JSON or building config objects:
1 2 3 4 5 6 7 | defaults = {"host": "localhost", "port": 8080} overrides = {"port": 9090, "debug": True} # Merge with the | operator (Python 3.9+) config = defaults | overrides print(config) # {'host': 'localhost', 'port': 9090, 'debug': True} |
One caveat: ordering is a property of the dictionary, not of equality. Two dicts with the same keys and values are considered equal even if their insertion order differs. 🐍