hdx.utilities.dictandlist
module hdx.utilities.dictandlist
Dict and List utilities.
Functions
-
invert_dictionary — Invert a dictionary from key - value to value - key. Assumes one to one mapping between keys and values.
-
merge_two_dictionaries — Merges b into a and returns merged result.
-
merge_dictionaries — Merges all dictionaries in dicts into a single dictionary and returns result.
-
dict_diff — Compares two dictionaries.
-
dict_of_lists_add — Add value to a list in a dictionary by key.
-
dict_of_sets_add — Add value to a set in a dictionary by key.
-
dict_of_dicts_add — Add key value pair to a dictionary within a dictionary by key.
-
list_distribute_contents_simple — Distribute the contents of a list eg. [1, 1, 1, 2, 2, 3] -> [1, 2, 3, 1, 2, 1]. List can contain complex types like dictionaries in which case the function can return the appropriate value eg. lambda x: x[KEY]
-
list_distribute_contents — Distribute the contents of a list eg. [1, 1, 1, 2, 2, 3] -> [1, 2, 1, 2, 1, 3]. List can contain complex types like dictionaries in which case the function can return the appropriate value eg. lambda x: x[KEY]
-
extract_list_from_list_of_dict — Extract a list by looking up key in each member of a list of dictionaries.
-
key_value_convert — Convert keys and/or values of dictionary using functions passed in as parameters.
-
integer_key_convert — Convert keys of dictionary to integers.
-
integer_value_convert — Convert values of dictionary to integers.
-
float_value_convert — Convert values of dictionary to floats.
-
avg_dicts — Create a new dictionary from two dictionaries by averaging values.
-
read_list_from_csv — Read a list of rows in dict or list form from a csv. The headers argument is either a row number or list of row numbers (in case of multi- line headers) to be considered as headers (rows start counting at 1), or the actual headers defined as a list of strings. If not set, all rows will be treated as containing values.
-
write_list_to_csv — Write a list of rows in dict or list form to a csv. (The headers argument is either a row number (rows start counting at 1), or the actual headers defined as a list of strings. If not set, all rows will be treated as containing values.)
-
args_to_dict — Convert command line arguments in a comma separated string to a dictionary.
invert_dictionary(d: MutableMapping) → dict
Invert a dictionary from key - value to value - key. Assumes one to one mapping between keys and values.
Parameters
-
d : MutableMapping — Dictionary
Returns
-
dict — Return inverse of dictionary
merge_two_dictionaries(a: MutableMapping, b: MutableMapping, merge_lists: bool = False) → MutableMapping
Merges b into a and returns merged result.
NOTE: tuples and arbitrary objects are not handled as it is totally ambiguous what should happen
Parameters
-
a : MutableMapping — dictionary to merge into
-
b : MutableMapping — dictionary to merge from
-
merge_lists : bool — Whether to merge lists (True) or replace lists (False). Default is False.
Returns
-
MutableMapping — Merged dictionary
Raises
-
ValueError
merge_dictionaries(dicts: Sequence[MutableMapping], merge_lists: bool = False) → MutableMapping
Merges all dictionaries in dicts into a single dictionary and returns result.
Parameters
-
dicts : Sequence[MutableMapping] — Dictionaries to merge into the first one in the list
-
merge_lists : bool — Whether to merge lists (True) or replace lists (False). Default is False.
Returns
-
MutableMapping — Merged dictionary
dict_diff(d1: MutableMapping, d2: MutableMapping, no_key: str = '
Compares two dictionaries.
Parameters
-
d1 : MutableMapping — First dictionary to compare
-
d2 : MutableMapping — Second dictionary to compare
-
no_key : str — What value to use if key is not found Defaults to '
'.
Returns
-
dict — Comparison dictionary
dict_of_lists_add(dictionary: MutableMapping, key: Any, value: Any) → None
Add value to a list in a dictionary by key.
Parameters
-
dictionary : MutableMapping — Dictionary to which to add values
-
key : Any — Key within dictionary
-
value : Any — Value to add to list in dictionary
Returns
-
None — None
dict_of_sets_add(dictionary: MutableMapping, key: Any, value: Any) → None
Add value to a set in a dictionary by key.
Parameters
-
dictionary : MutableMapping — Dictionary to which to add values
-
key : Any — Key within dictionary
-
value : Any — Value to add to set in dictionary
Returns
-
None — None
dict_of_dicts_add(dictionary: MutableMapping, parent_key: Any, key: Any, value: Any) → None
Add key value pair to a dictionary within a dictionary by key.
Parameters
-
dictionary : MutableMapping — Dictionary to which to add values
-
parent_key : Any — Key within parent dictionary
-
key : Any — Key within dictionary
-
value : Any — Value to add to set in dictionary
Returns
-
None — None
list_distribute_contents_simple(input_list: Sequence, function: Callable[[Any], Any] = lambda x: x) → list
Distribute the contents of a list eg. [1, 1, 1, 2, 2, 3] -> [1, 2, 3, 1, 2, 1]. List can contain complex types like dictionaries in which case the function can return the appropriate value eg. lambda x: x[KEY]
Parameters
-
input_list : Sequence — List to distribute values
-
function : Callable[[Any], Any] — Return value to use for distributing. Defaults to lambda x: x.
Returns
-
list — Distributed list
list_distribute_contents(input_list: Sequence, function: Callable[[Any], Any] = lambda x: x) → list
Distribute the contents of a list eg. [1, 1, 1, 2, 2, 3] -> [1, 2, 1, 2, 1, 3]. List can contain complex types like dictionaries in which case the function can return the appropriate value eg. lambda x: x[KEY]
Parameters
-
input_list : Sequence — List to distribute values
-
function : Callable[[Any], Any] — Return value to use for distributing. Defaults to lambda x: x.
Returns
-
list — Distributed list
extract_list_from_list_of_dict(list_of_dict: Sequence[dict], key: Any) → list
Extract a list by looking up key in each member of a list of dictionaries.
Parameters
-
list_of_dict : Sequence[dict] — List of dictionaries
-
key : Any — Key to find in each dictionary
Returns
-
list — List containing values returned from each dictionary
key_value_convert(dictin: MutableMapping, keyfn: Callable[[Any], Any] = lambda x: x, valuefn: Callable[[Any], Any] = lambda x: x, dropfailedkeys: bool = False, dropfailedvalues: bool = False, exception: Exception = ValueError) → dict
Convert keys and/or values of dictionary using functions passed in as parameters.
Parameters
-
dictin : MutableMapping — Input dictionary
-
keyfn : Callable[[Any], Any] — Function to convert keys. Defaults to lambda x: x
-
valuefn : Callable[[Any], Any] — Function to convert values. Defaults to lambda x: x
-
dropfailedkeys : bool — Whether to drop dictionary entries where key conversion fails. Defaults to False.
-
dropfailedvalues : bool — Whether to drop dictionary entries where value conversion fails. Defaults to False.
-
exception : Exception — The exception to expect if keyfn or valuefn fail. Defaults to ValueError.
Returns
-
dict — New dictionary with converted keys and/or values
integer_key_convert(dictin: MutableMapping, dropfailedkeys: bool = False) → dict
Convert keys of dictionary to integers.
Parameters
-
dictin : MutableMapping — Input dictionary
-
dropfailedkeys : bool — Whether to drop dictionary entries where key conversion fails. Defaults to False.
Returns
-
dict — Dictionary with keys converted to integers
integer_value_convert(dictin: MutableMapping, dropfailedvalues: bool = False) → dict
Convert values of dictionary to integers.
Parameters
-
dictin : MutableMapping — Input dictionary
-
dropfailedvalues : bool — Whether to drop dictionary entries where key conversion fails. Defaults to False.
Returns
-
dict — Dictionary with values converted to integers
float_value_convert(dictin: MutableMapping, dropfailedvalues: bool = False) → dict
Convert values of dictionary to floats.
Parameters
-
dictin : MutableMapping — Input dictionary
-
dropfailedvalues : bool — Whether to drop dictionary entries where key conversion fails. Defaults to False.
Returns
-
dict — Dictionary with values converted to floats
avg_dicts(dictin1: MutableMapping, dictin2: MutableMapping, dropmissing: bool = True) → dict
Create a new dictionary from two dictionaries by averaging values.
Parameters
-
dictin1 : MutableMapping — First input dictionary
-
dictin2 : MutableMapping — Second input dictionary
-
dropmissing : bool — Whether to drop keys missing in one dictionary. Defaults to True.
Returns
-
dict — Dictionary with values being average of 2 input dictionaries
read_list_from_csv(url: Path | str, headers: int | Sequence[int] | Sequence[str] | None = None, dict_form: bool = False, **kwargs: Any) → list[list | dict]
Read a list of rows in dict or list form from a csv. The headers argument is either a row number or list of row numbers (in case of multi- line headers) to be considered as headers (rows start counting at 1), or the actual headers defined as a list of strings. If not set, all rows will be treated as containing values.
Parameters
-
url : Path | str — URL or path to read from
-
headers : int | Sequence[int] | Sequence[str] | None — Row number of headers. Defaults to None.
-
dict_form : bool — Return dict (requires headers parameter) or list for each row. Defaults to False (list)
-
**kwargs : Any — Other arguments to pass to Tabulator Stream
Returns
-
list[list | dict] — List of rows in dict or list form
Raises
-
ValueError
write_list_to_csv(filepath: Path | str, rows: list[Sequence | Mapping], headers: int | Sequence[str] | None = None, columns: Sequence[int] | Sequence[str] | None = None, encoding: str | None = None) → None
Write a list of rows in dict or list form to a csv. (The headers argument is either a row number (rows start counting at 1), or the actual headers defined as a list of strings. If not set, all rows will be treated as containing values.)
Parameters
-
filepath : Path | str — Path to write to
-
rows : list[Sequence | Mapping] — List of rows in dict or list form
-
headers : int | Sequence[str] | None — Headers to write. Defaults to None.
-
columns : Sequence[int] | Sequence[str] | None — Columns to write. Defaults to all.
-
encoding : str | None — Encoding to use. Defaults to None (infer encoding).
Returns
-
None — None
args_to_dict(args: str) → dict
Convert command line arguments in a comma separated string to a dictionary.
Parameters
-
args : str — Command line arguments
Returns
-
dict — Dictionary of arguments