PyGuide

Learn Python with practical tutorials and code examples

Are Python Dictionaries Ordered? Complete Answer

Yes, Python dictionaries are ordered as of Python 3.7+. This means dictionaries maintain the insertion order of their key-value pairs, making them both a mapping and an ordered collection.

Quick Answer #

Python dictionaries are ordered in:

  • Python 3.7+: Guaranteed by language specification
  • Python 3.6: Implementation detail (CPython only)
  • Python 3.5 and earlier: Not ordered

🐍 Try it yourself

Output:
Click "Run Code" to see the output

When Did This Change? #

Python 3.7 (2018) #

  • Dictionary order became part of the language specification
  • Guaranteed across all Python implementations
  • Officially documented behavior

Python 3.6 (2016) #

  • Order preservation was an implementation detail in CPython
  • Not guaranteed in other Python implementations (PyPy, Jython)
  • Performance improvement as a side effect

🐍 Try it yourself

Output:
Click "Run Code" to see the output

What Does "Ordered" Mean? #

When we say Python dictionaries are ordered, it means:

  1. Insertion order is preserved: Keys maintain their original sequence
  2. Iteration is predictable: for loops always traverse in insertion order
  3. Methods respect order: .keys(), .values(), .items() return ordered views
# Before Python 3.7, this order was unpredictable
# Now it's guaranteed to match insertion order
user_data = {
    'name': 'Alice',
    'age': 30,
    'city': 'New York',
    'email': '[email protected]'
}

# Always prints in insertion order
print(list(user_data.keys()))
# Output: ['name', 'age', 'city', 'email']

Practical Implications #

✅ You Can Rely On #

  • Consistent iteration order across program runs
  • First/last item access using next(iter(dict)) patterns
  • Order-dependent algorithms working predictably

🐍 Try it yourself

Output:
Click "Run Code" to see the output

⚠️ Common Misconceptions #

  • Not sorted: Order follows insertion, not alphabetical/numerical sorting
  • Updates preserve position: Modifying existing keys doesn't change order
  • Deletion affects order: Removing keys changes iteration sequence

🐍 Try it yourself

Output:
Click "Run Code" to see the output

Backward Compatibility Considerations #

For Legacy Code (Python < 3.7) #

If supporting older Python versions:

# For consistent ordering across versions
from collections import OrderedDict

# Use OrderedDict for guaranteed order in all versions
legacy_dict = OrderedDict([
    ('first', 1),
    ('second', 2),
    ('third', 3)
])

Migration Tips #

  • Modern Python (3.7+): Regular dict is sufficient
  • Mixed environments: Check Python version or use OrderedDict
  • Testing: Verify order-dependent code across versions

Performance Impact #

The ordering feature comes with minimal performance cost:

  • Memory: Slightly higher due to order tracking
  • Speed: Insertion/lookup remain O(1) average case
  • Benefit: No need for separate ordering structures

🐍 Try it yourself

Output:
Click "Run Code" to see the output

Summary #

  • Python 3.7+: Dictionaries are officially ordered
  • Insertion order: Keys maintain their creation sequence
  • Reliable iteration: Consistent order across program runs
  • Backward compatibility: Use OrderedDict for older versions
  • Performance: Minimal impact on speed and memory

The ordered nature of modern Python dictionaries eliminates the need for many custom ordering solutions and makes code more predictable and reliable.