Attribute-access ordered dictionary
Project description
atdict
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.
atdict was originally developed in 2017 as the class
Object
,
in scribblers, which
represented event objects in
alphatwirl. It was
released as an independent package in 2019 as atdict.
Requirement
- Python 2.7, 3.6, or 3.7
Install
You can install with pip
.
$ pip install -U atdict
How to use
Import atdict
Import atdict
from the package atdict
.
from atdict import atdict
Initialize 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')
Access to a value
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
Modify a value
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
.
Add a key
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')
Delete a key
del
deletes a key.
del o1.bar
print(o1)
atdict(foo=50, baz='eggs')
Copy and deepcopy
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
Pickle
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')
License
- atdict is licensed under the BSD license.
Contact
- Tai Sakuma - tai.sakuma@gmail.com
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for atdict-0.9.3-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e16fa897ae822c80050519d39ec39876848573c3a970f71156208de42c7c9fc8 |
|
MD5 | 0ae8e5cf1dabf9e1c7f7bc74ad69c182 |
|
BLAKE2b-256 | c1aab4452e0dd28920efa6396c46f0d92da943c4b98a4784d15bfaf49e338f2c |