LazyDict#

class LazyDict(load_function, eval_function=None, *args, **kwargs)#

Bases: dict[K, V], Generic[K, V]

Dictionary that supports lazy loading and optional lazy value evaluation.

Parameters:
  • load_function (Callable[[], dict[K, V] | Iterable[tuple[K, V]]]) – Callable returning either a dict or an iterable of (key, value) pairs.

  • eval_function (Callable[[V], V] | None) – Optional callable applied to values on first access (per key).

  • args (Any)

  • kwargs (Any)

Example

>>> def load(): return {"a": "2 + 2"}
>>> def evaluate(expr): return eval(expr)
>>> d = LazyDict(load, evaluate)
>>> d["a"]
4
__init__(load_function, eval_function=None, *args, **kwargs)#
Parameters:
  • load_function (Callable[[], dict[K, V] | Iterable[tuple[K, V]]])

  • eval_function (Callable[[V], V] | None)

  • args (Any)

  • kwargs (Any)

Return type:

None

Methods

__init__(load_function[, eval_function])

clear()

copy()

fromkeys(iterable[, value])

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

get(key[, default])

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

items()

keys()

pop(k[,d])

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

popitem()

Remove and return a (key, value) pair as a 2-tuple.

reload()

Reload the dictionary using the original load function.

setdefault(key[, default])

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

update([E, ]**F)

If E is present and has a .keys() method, then does: for k in E.keys(): 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()

keys() a set-like object providing a view on D's keys#
values() an object providing a view on D's values#
items() a set-like object providing a view on D's items#
get(key, default=None)#

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

Parameters:
  • key (K)

  • default (V | None)

Return type:

V | None

reload()#

Reload the dictionary using the original load function.

Clears existing values and evaluation state, then loads fresh data.

Return type:

None

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

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

pop(k[, d]) v, remove specified key and return the corresponding value.#

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

popitem()#

Remove and return a (key, value) pair as a 2-tuple.

Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.

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 mapping/iterable E and F.#

If E is present and has a .keys() method, then does: for k in E.keys(): 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]