A dictionary that is indexed by insertion order.
Project description
Introduction
indexed.IndexedOrderedDict (alias indexed.Dict) is fully compatible with collections.OrderedDict and can be used as a drop in replacement. The main difference is that key, value and item views support accessing elements by their index.
d = indexed.IndexedOrderedDict()
d["first-key"] = "first-value"
d["second-key"] = "second-value"
d["third-key"] = "third-value"
values = d.values()
assert values[2] == "third-value"
assert d.keys().index("second-key") == 1
Features
Access keys, values and items by index, e.g., d.keys()[5].
Find the index of a key, e.g., d.keys().index("key").
Sort keys in place, e.g., d.sort().
Excluding those additions the API is the same as the API of collections.OrderedDict(). Including:
Initialization, setting, getting and deleting items
Iterating forwards and in reverse
d.clear()
d.popitem(last=True)
d.move_to_end(key, last=True)
d.keys(), d.values(), d.items()
d.pop(key[, default])
d.setdefault(key, default=None)
String representation
Pickling
Copying
Creating from keys
Comparing order sensitively with other ordered dictionaries or order insensitively with other mappings
Installing
pip install indexed
Performance
Performance is practically on the same order of magnitude as the built in collections.OrderedDict, with exceptions in bold:
d |
collections.OrderedDict |
indexed.IndexedOrderedDict |
||
---|---|---|---|---|
Operation |
Avergage |
Worst case |
Average |
Worst case |
d.copy() |
O(n) |
O(n) |
O(n) |
O(n) |
d[key] |
O(1) |
O(n) |
O(1) |
O(n) |
d[key] = value |
O(1) |
O(n) [1] |
O(1) |
O(n) [1] |
del d[key] |
O(1) |
O(n) |
O(n) |
O(n) |
d.keys()[i] |
O(n) [2] |
O(n) [2] |
O(1) |
O(1) |
d.values()[i] |
O(n) [3] |
O(n) [3] |
O(1) |
O(n) |
d.items()[i] |
O(n) [3] |
O(n) [3] |
O(1) |
O(n) |
d.keys().index(x) |
O(n) [3] |
O(n) [3] |
O(n) |
O(n) |
License
This library is derived from CPython’s collections.OrderedDict and licensed under the PSFL. See the LICENSE file for the full license text.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.