DictList#
- class nextnanopy.utils.mycollections.DictList(*args, **kwargs)#
Bases:
OrderedDictOrdered 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:
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__, sodict(d),d.update(other),key in dand**dkeep their usual key-based behaviour. Use .keys() when you need keys.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#