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 atdict
or with pip
:
$ pip install -U atdict
Import atdict
from the package atdict
.
from atdict import atdict
You 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.