An attribute-access ordered dictionary
atdict is an attribute-access ordered dictionary. You can use a key
name as an attribute to access the value of the dictionary for a key,
for example, o.key_name rather than o['key_name']. Only a minimum
set of methods are implemented so as to minimize the chances of name
conflicts.
- Python 3.6, 3.7, 3.8, or 3.9
You can install with conda from conda-forge:
conda install -c conda-forge atdictor with pip:
$ pip install -U atdictImport atdict from the package atdict.
from atdict import atdictYou can initialize an atdict with any arguments that can initialize
collections.OrderedDict.
For example:
o1 = atdict([('foo', 40), ('bar', 'ham')])
print(o1)It will print.
atdict(foo=40, bar='ham')An atdict can be also initialized with another atdict.
o2 = atdict(o1)
print(o2)
The o2 is initialized with a (shallow) copy of the contents of o1.
atdict(foo=40, bar='ham')
Yon can use a key name as an attribute of atdict.
print(o1.foo)This will print the value for the key foo, which is 40.
40
To modify a value, you can assign a new value to the attribute.
o1.foo = 50
print(o1)atdict(foo=50, bar='ham')
The value for the key foo changed from 40 to 50.
To add a key, you can also assign a value to the attribute
o1.baz = 'eggs'
print(o1)atdict(foo=50, bar='ham', baz='eggs')
del deletes a key.
del o1.bar
print(o1)atdict(foo=50, baz='eggs')
A copy will be created if atdict is initialized with another
atdict. However, this will be a shallow copy.
l = [1, 2]
o1 = atdict([('foo', l)])
o2 = atdict(o1)
print(o2.foo is o1.foo)True
To make a deep copy, you can use copy.deepcopy().
import copy
l = [1, 2]
o1 = atdict([('foo', l)])
o2 = copy.deepcopy(o1)
print(o2)atdict(foo=[1, 2])
o2.foo and o1.foo are not the same object.
print(o2.foo is o1.foo)False
An atdict is picklable as long as all values are picklable.
import pickle
o1 = atdict([('foo', 40), ('bar', 'ham')])
p1 = pickle.dumps(o1)
o2 = pickle.loads(p1)
print(o2)atdict(foo=40, bar='ham')
- atdict is licensed under the BSD license.
