Skip to content

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()
Back to top