![]() |
VOOZH | about |
OrderedDict is a subclass of Python’s built-in dictionary that remembers the order in which keys are inserted. Before Python 3.7, dictionaries did not preserve insertion order, so OrderedDict was used. Even now, it remains useful because it provides additional features:
Example: This example shows how to create an OrderedDict, insert items and verify that it preserves insertion order.
[('apple', 1), ('banana', 2), ('cherry', 3)]
Explanation:
Before diving into examples, let’s understand how OrderedDict differs from a normal dict:
Example: This example compares dict and OrderedDict.
dict a 1 b 2 c 3 d 4 ordered dict d 4 b 2 a 1 c 3
Explanation:
Now let’s go through the most useful features of OrderedDict with examples.
OrderedDict maintains the sequence exactly as elements were added. This is particularly useful in applications such as JSON serialization, form field processing or displaying logs, where the order of items carries semantic meaning.
Example: This example shows that OrderedDict preserves the sequence of items as they were added.
a 1 b 2 c 3 OrderedDict: d 4 b 2 a 1 c 3
Explanation: This code creates a regular dictionary d and prints its items in insertion order. Then, it creates an OrderedDict od with keys in a different order and prints them, showing how OrderedDict preserves the exact insertion sequence.
In an OrderedDict, modifying the value of an existing key does not change its position in the order. This means you can update the values without affecting the original key order.
Example: This example shows that updating values does not move keys from their original position.
a 1 b 2 c 5 d 4
Explanation: This code creates an OrderedDict od with keys 'a', 'b', 'c', and 'd'. It then updates the value of the key 'c' to 5. When printing, the keys remain in their original order, showing that changing a value does not affect the key order in an OrderedDict.
Unlike regular dicts, OrderedDict checks both content and order for equality, so differing orders make them unequal. This is useful when order matters.
Example: This example shows that two OrderedDicts with the same content but different order are not equal.
False
Explanation: This code creates two OrderedDicts od1 and od2, with the same keys and values but in different orders. When comparing them, the result is False because OrderedDicts consider both the content and the order of keys for equality.
OrderedDict doesn’t have a built-in .reverse() method, but you can reverse its order by using Python’s reversed() function on list(od.items()). Creating a new OrderedDict from this reversed list preserves the reversed order.
Example: This example shows how to reverse an OrderedDict using reversed().
c 3 b 2 a 1
Explanation: This code creates an OrderedDict d1 with keys 'a', 'b', and 'c'. It then reverses the order of d1’s items using reversed() and creates a new OrderedDict d2 with this reversed order.
In OrderedDict, popitem() can remove either the last item (last=True, default) or the first item (last=False). In contrast, a normal dict’s popitem() always removes the last item only.
Example: This example shows how popitem() can remove items from the last or the first.
('c', 3)
Explanation: This code removes and returns the last item ('c', 3) from the OrderedDict using popitem(last=True).
With the move_to_end() method, OrderedDict provides the flexibility to reposition keys. You can push a specific key to the beginning or end of the dictionary without deleting and re-inserting it.
Example: This example shows how move_to_end() can move keys to the front or back.
b 2 c 3 a 1
Explanation: This code moves the key 'a' to the end of the OrderedDict and moves 'b' to the front. When printed, the keys appear in the order: 'b', 'c', 'a'.
Deleting and re-inserting a key in an OrderedDict moves it to the end, preserving insertion order. This is useful for tracking recent actions or updating featured items.
Example: This example shows that when you delete and reinsert a key, it moves to the end.
a 1 b 2 d 4 a 1 b 2 d 4 c 3
Explanation: This code deletes the key 'c' from the OrderedDict, then prints the remaining items. After that, it re-inserts 'c' with its value at the end and prints all items again.
Now, let's see in brief the difference between OrderedDict and Dict to sum it up:
Feature | Dict | OrderedDict |
|---|---|---|
Maintains insertion order | Yes | Yes |
Allows key reordering | No | Yes (move_to_end(key, last=True)) |
Pop items from ends | No (only popitem() removes last item) | Yes (popitem(last=True/False) supports both ends) |
Equality check considers order | No (order ignored) | Yes (order matters) |
Performance | Faster | Slightly slower |