NamedKeyDict

class lsst.daf.butler.core.utils.NamedKeyDict(*args)

Bases: collections.abc.MutableMapping, typing.Generic

A dictionary wrapper that require keys to have a .name attribute, and permits lookups using either key objects or their names.

Names can be used in place of keys when updating existing items, but not when adding new items.

It is assumed (but asserted) that all name equality is equivalent to key equality, either because the key objects define equality this way, or because different objects with the same name are never included in the same dictionary.

Parameters:
args

All positional constructor arguments are forwarded directly to dict. Keyword arguments are not accepted, because plain strings are not valid keys for NamedKeyDict.

Raises:
AttributeError

Raised when an attempt is made to add an object with no .name attribute to the dictionary.

AssertionError

Raised when multiple keys have the same name.

Attributes Summary

names The set of names associated with the keys, in the same order (KeysView).

Methods Summary

byName() Return a dict with names as keys and the same values as self.
clear()
copy()
freeze() Disable all mutators, effectively transforming self into an immutable mapping.
get(k[,d])
items()
keys()
pop(k[,d]) If key is not found, d is returned if given, otherwise KeyError is raised.
popitem() as a 2-tuple; but raise KeyError if D is empty.
setdefault(k[,d])
update([E, ]**F) If E present and has a .keys() method, does: for k in E: D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v
values()

Attributes Documentation

names

The set of names associated with the keys, in the same order (KeysView).

Methods Documentation

byName() → Dict[str, V]

Return a dict with names as keys and the same values as self.

clear() → None. Remove all items from D.
copy() → lsst.daf.butler.core.utils.NamedKeyDict[~K, ~V][K, V]
freeze()

Disable all mutators, effectively transforming self into an immutable mapping.

get(k[, d]) → D[k] if k in D, else d. d defaults to None.
items() → a set-like object providing a view on D's items
keys() → a set-like object providing a view on D's keys
pop(k[, d]) → v, remove specified key and return the corresponding value.

If key is not found, d is returned if given, otherwise KeyError is raised.

popitem() → (k, v), remove and return some (key, value) pair

as a 2-tuple; but raise KeyError if D is empty.

setdefault(k[, d]) → D.get(k,d), also set D[k]=d if k not in D
update([E, ]**F) → None. Update D from mapping/iterable E and F.

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

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