from collections.abc import Iterable, Sequence from typing import Any def flatten(d: dict[Any, Any], parent: str = "", sep: str = ".") -> dict[Any, Any]: """ Flatten dictionary keys. """ ret: dict[Any, Any] = {} for key, value in d.items(): new_key = str(sep.join([str(parent), str(key)]) if parent else key) if isinstance(value, dict): ret.update(flatten(value, new_key, sep=sep)) else: ret[new_key] = value return ret def exclude(d: dict[str, Any], *, keys: Iterable[str]) -> dict[str, Any]: return {i: d[i] for i in d if i not in keys} def compare_seq_of_dicts( seq1: Sequence[dict[str, Any]], seq2: Sequence[dict[str, Any]] ) -> bool: if len(seq1) != len(seq2): return False sorted_list1 = sorted(seq1, key=lambda x: sorted(x.items())) sorted_list2 = sorted(seq2, key=lambda x: sorted(x.items())) for dict1, dict2 in zip(sorted_list1, sorted_list2, strict=False): if dict1 != dict2: return False return True