collections.OrderedDict only remembers the order of which
keys were inserted into it, and does not allow users to re-order the keys and/or
insert new keys into arbitrary position in the current key order.
OrderableDict, Orderable Dictionary, is almost exactly the same as python
collections.OrderedDict with the added ability to order & re-order the keys
that are inserted into it.
# Example # ------- # # using OrderableDict from pyats.datastructures import OrderableDict # create a blank OrderableDict obj = OrderableDict() # all added keys are remembered in the order as they are added obj['A'] = 1 obj['B'] = 2 obj['C'] = 3 # OrderableDict([('A', 1), ('B', 2), ('C', 3)]) # use move() api to move an existing key to a new positions # eg, moving 'C' key and value to first position obj.move('C', 0) # OrderableDict([('C', 3), ('A', 1), ('B', 2)]) # use insert() to insert new keys into arbitrary positions # eg, insert 'D' key into 2nd position obj.insert('D', 4, position = 1) # OrderableDict([('C', 3), ('D', 4), ('A', 1), ('B', 2)])
OrderableDict behavior is normally exactly identical to those of python
collections.OrderedDict, except that it comes with two new APIs:
moves an existing key in the datastructure to just before
insert(key, value, position)
insert a new key/value pair into the datastructure just before
position argument refers to the
corresponding index value of the list of all currently ordered keys. That is,
if you create a list from the ordered keys of the current datastrucuture, each
position is exactly its list index value.
The implementation of
OrderableDict is not as efficient as
OrderedDict. A separate list is used internally to store the current
order of keys, and thus can lead to a larger memory footprint. This problem may
be further exacerbated if the keys are very large.