Dict utility functions.
Module Attributes
Key type. |
|
Value type. |
|
Hashable value type. |
|
Outer key type. |
|
Valid input types for making the |
Functions
TypedDict(typename[, fields, total]) |
A simple typed namespace. |
|
Compute and store key using func if key is not in the dict. |
|
Flatten a nested dictionary. |
|
Swap keys and values. |
Classes
ActionLevel(value) |
Action level enumeration type for events. |
|
A nested dictionary that returns default-backed child dictionaries. |
TypeVar(name, *constraints[, bound, ...]) |
Type variable. |
Value type.
alias of TypeVar(‘VT’)
Compute and store key using func if key is not in the dict.
d – A dict.
key – The key to get.
func – A function to call for missing keys. Perform regular __getitem__ call if None.
The value of k in d.
Swap keys and values.
d – A dict to reverse.
duplicate_key_action – Action to take if the return dict has key collisions in the reversed dict, i.e. there are duplicate values in d. Set to ignore to allow.
A reversed copy of d.
Examples
Reversing a dict with two elements.
>>> from rics.collections.dicts import reverse_dict
>>> reverse_dict({"A": 0, "B": 1})
{0: 'A', 1: 'B'}
ValueError – If there are duplicate values in d and duplicate_key_action='raise'.
Flatten a nested dictionary.
d – A dict to flatten. Keys must be strings.
join_string – Joiner for nested keys.
filter_predicate – A callable which takes a key and value, returning True if the entry should be kept.
A flattened version of d.
Examples
Flattening a shallow nested dict.
>>> from rics.collections.dicts import flatten_dict
>>> flatten_dict({"foo": 0, "bar": {"foo": 1, "bar": 2}})
{'foo': 0, 'bar.foo': 1, 'bar.bar': 2}
Bases: Mapping[OKT, Dict[KT, VT]]
A nested dictionary that returns default-backed child dictionaries.
The length of an InheritedKeysDict is equal to the number of specific outer keys, and is considered True
when cast to bool if there are shared and/or specific keys present.
default – Shared (fallback) mappings for all contexts.
specific – Context-specific mappings, backed by the default fallback mappings.
Examples
A short demonstration.
>>> from rics.collections.dicts import InheritedKeysDict
>>> shared = {0: 'fallback-for-0', 1: 'fallback-for-1'}
>>> specific = {
... 'ctx0': {0: 'c0-v0'},
... 'ctx1': {0: 'c1-v0', 1: 'c1-v1', 2: 'c1-v2'},
... }
>>> ikd = InheritedKeysDict(default=shared, specific=specific); ikd
InheritedKeysDict(default={0: 'fallback-for-0', 1: 'fallback-for-1'}, specific={'ctx0': {0: 'c0-v0'},
'ctx1': {0: 'c1-v0', 1: 'c1-v1', 2: 'c1-v2'}})
The value of key 0 is inherited for ‘ctx0’. The ‘ctx1’-context defines all shared keys, as well as a unique key.
>>> ikd['ctx0']
{0: 'c0-v0', 1: 'fallback-for-1'}
>>> ikd['ctx1']
{0: 'c1-v0', 1: 'c1-v1', 2: 'c1-v2'}
The InheritedKeysDict.__contains__-method is True for all keys.
Unknown keys simply return the default values. This will be an empty
if no specific keys are specified.
>>> 'unseen-key' in ikd
True
>>> ikd['unseen-key']
{0: 'fallback-for-0', 1: 'fallback-for-1'}
The length of ikd is equal to the number of specific contexts (two in this case).
Create instance from a mapping.
The given argument must be on the format:
{
"default": {key: value},
"specific": {
ctx0: {key: value},
ctx1: {key: value},
...
ctxN: {key: value},
}
}
No other top-level keys are accepted, but neither default nor context-specific are required.
arg – Input to make an instance from.
A new instance.
ValueError – If there are any keys other than ‘default’ and ‘context-specific’ present in mapping.
Valid input types for making the InheritedKeysDict.make() function.