DictList#

class nextnanopy.utils.mycollections.DictList(*args, **kwargs)#

Bases: OrderedDict

Ordered dictionary whose values are also reachable by position.

It is a mixture between a dictionary and a list because it allows to access the values via keys or integer indexes. Common usage:

d = DictList(a=3, b='t')
d[0] = 3
d['a'] = 3

It has all the methods and attributes from a dictionary like .keys(), .values(), .items()

Moreover, it supports iterations like a list:

for value in d:
    print(value)
>>> 3
>>> 't'

Notes

Two deliberate deviations from normal Mapping semantics:

  1. Iteration yields values, not keys. This is the documented behaviour of this class and much of nextnanopy relies on it (e.g. for var in datafile.variables: var.name). Note that dict/OrderedDict C-level fast paths bypass __iter__, so dict(d), d.update(other), key in d and **d keep their usual key-based behaviour. Use .keys() when you need keys.

  2. Integer subscripts are positions, not keys, so integer keys are unreachable via d[…]. All keys used in nextnanopy are strings (variable/file/folder names).

clear() None.  Remove all items from od.#
copy() a shallow copy of od#
classmethod fromkeys(/, iterable, value=None)#

Create a new ordered dictionary with keys from iterable and values set to value.

get(key, default=None, /)#

Return the value for key if key is in the dictionary, else default.

items() a set-like object providing a view on D's items#
keys() a set-like object providing a view on D's keys#
move_to_end(/, key, last=True)#

Move an existing element to the end (or beginning if last is false).

Raise KeyError if the element does not exist.

pop(/, key, default=<unrepresentable>)#

If the key is not found, return the default if given; otherwise, raise a KeyError.

popitem(/, last=True)#

Remove and return a (key, value) pair from the dictionary.

Pairs are returned in LIFO order if last is true or FIFO order if false.

setdefault(/, key, default=None)#

Insert key with a value of default if key is not in the dictionary.

Return the value for key if key is in the dictionary, else default.

update([E, ]**F) None.  Update D from dict/iterable E and F.#

If E is present and has a .keys() method, then does: for k in E: D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]

values() an object providing a view on D's values#