nadict¶
A nested dict with both attribute and item access.
NA stands for Nested and Attribute.
NADict
¶
A nested dict with both attribute and item access.
It is intended to be used with keys that are valid Python identifiers. However, except for string keys containing a dot, there are actually no hard limitations. If a key equals an existing attribute name, attribute access is of cause not possible.
Nested items can be accessed via a dot notation, as shown in the example below.
Examples¶
n = NADict(a=1, b=NADict(c=3, d=4)) n['a'] 1 n.a 1 n['b.c'] 3 n.b.c 3 n['b.e'] = 5 n.b.e 5
Attributes¶
_dict : dict Dictionary holding the actial items.
clear(self)
¶
Clear all keys.
Source code in ontopy/nadict.py
def clear(self):
"""Clear all keys."""
self._dict.clear()
copy(self)
¶
Returns a deep copy of self.
Source code in ontopy/nadict.py
def copy(self):
"""Returns a deep copy of self."""
return copy.deepcopy(self)
fromkeys(self, iterable, value=None)
staticmethod
¶
Returns a new NADict with keys from iterable
and values
set to value
.
Source code in ontopy/nadict.py
@staticmethod
def fromkeys(self, iterable, value=None):
"""Returns a new NADict with keys from `iterable` and values
set to `value`."""
n = NADict()
for key in iterable:
n[key] = value
return n
get(self, key, default=None)
¶
Returns the value for key
if key
is in self, else return
default
.
Source code in ontopy/nadict.py
def get(self, key, default=None):
"""Returns the value for `key` if `key` is in self, else return
`default`."""
if '.' in key:
k1, k2 = key.split('.', 1)
return self._dict[k1].get(k2, default)
else:
return self._dict.get(key, default)
items(self, prefix='')
¶
Returns an iterator over all items as (key, value) pairs.
Source code in ontopy/nadict.py
def items(self, prefix=''):
"""Returns an iterator over all items as (key, value) pairs."""
for k, v in self._dict.items():
key = '%s.%s' % (prefix, k) if prefix else k
if isinstance(v, NADict):
yield from v.items(key)
else:
yield (key, v)
keys(self, prefix='')
¶
Returns an iterator over all keys.
Source code in ontopy/nadict.py
def keys(self, prefix=''):
"""Returns an iterator over all keys."""
for k, v in self._dict.items():
key = '%s.%s' % (prefix, k) if prefix else k
if isinstance(v, NADict):
yield from v.keys(key)
else:
yield key
pop(self, key, default=None)
¶
Removed key
and returns corresponding value. If key
is not
found, default
is returned if given, otherwise KeyError is
raised.
Source code in ontopy/nadict.py
def pop(self, key, default=None):
"""Removed `key` and returns corresponding value. If `key` is not
found, `default` is returned if given, otherwise KeyError is
raised."""
if '.' in key:
k1, k2 = key.split('.', 1)
return self._dict[k1].pop(k2, default)
else:
return self._dict.pop(key, default)
popitem(self, prefix='')
¶
Removes and returns some (key, value). Raises KeyError if empty.
Source code in ontopy/nadict.py
def popitem(self, prefix=''):
"""Removes and returns some (key, value). Raises KeyError if empty."""
item = self._dict.popitem()
if isinstance(item, NADict):
k, v = item
item2 = item.popitem(k)
self._dict[k] = v
return item2
else:
k, v = self._dict.popitem()
key = '%s.%s' % (prefix, k) if prefix else k
return (key, v)
setdefault(self, key, value=None)
¶
Inserts key
and value
pair if key is not found.
Returns the new value for key
.
Source code in ontopy/nadict.py
def setdefault(self, key, value=None):
"""Inserts `key` and `value` pair if key is not found.
Returns the new value for `key`."""
if '.' in key:
k1, k2 = key.split('.', 1)
return self._dict[k1].setdefault(k2, value)
else:
return self._dict.setdefault(key, value)
update(self, *args, **kw)
¶
Updates self with dict/iterable from args
and keyword arguments
from kw
.
Source code in ontopy/nadict.py
def update(self, *args, **kw):
"""Updates self with dict/iterable from `args` and keyword arguments
from `kw`."""
for arg in args:
if hasattr(arg, 'keys'):
for k in arg:
self[k] = arg[k]
else:
for k, v in arg:
self[k] = v
for k, v in kw.items():
self[k] = v
values(self)
¶
Returns a set-like providing a view of all style values.
Source code in ontopy/nadict.py
def values(self):
"""Returns a set-like providing a view of all style values."""
return self._dict.values()