def flatten(d: collections.MutableMapping, parent_key: str = '', sep: str = '_') -> dict: """ flatten a dict credit goes to https://stackoverflow.com/a/6027615/13224997 Parameters ---------- d : dict dictionary to be flattened parent_key : str used internally for appending to a dict sep : str separating character in the flattened dict keys Returns ------- dict the flattened dict. """ items = [] for k, v in d.items(): new_key = parent_key + sep + k if parent_key else k if isinstance(v, collections.MutableMapping): items.extend(flatten(v, new_key, sep=sep).items()) else: items.append((new_key, v)) return dict(items)
def introspect(d: collections.MutableMapping, parent_key: str = '', sep: str = '.') -> dict: items = [] for k, v in d.items(): new_key = parent_key + sep + str(k) if parent_key else str(k) if isinstance(v, collections.MutableMapping): items.extend(introspect(v, new_key, sep=sep).items()) else: items.append((new_key, v)) return dict(items)
def flatten_dict( data: collections.MutableMapping, parent_key: str = "", sep: Optional[str] = None, ) -> dict: """Return nested dict as single level dict.""" sep = sep or DRF_EXCEPTIONS_SEPARATOR items: list = [] for k, v in data.items(): new_key = sep.join([parent_key, k]) if parent_key and sep else k if isinstance(v, collections.MutableMapping): items.extend(flatten_dict(v, new_key, sep=sep).items()) else: items.append((new_key, v)) return dict(items)
def result_to_flat_dict(record: collections.MutableMapping, parent: str = '', sep: str = '__') -> Dict: items: List = [] for k, v in record.items(): if not parent or k.startswith('weapon'): new_key = k else: new_key = f"{parent}{sep}{k}" if isinstance(v, collections.MutableMapping): items.extend(result_to_flat_dict(v, new_key, sep=sep).items()) else: items.append((new_key, v)) return dict(items)
def flatten(d: collections.MutableMapping, parent_key='', sep='.') -> dict: """flattens directory so there isn't any dict or list in items renames keys of nested dictionaries, so that there are no conflicts >>> flatten({'a': 1, 'c': {'a': 2, 'b': {'x': 5, 'y' : 10}}, 'd': [1, 2, 3]}) {'a': 1, 'c.a': 2, 'c.b.x': 5, 'c.b.y': 10, 'd.0': 1, 'd.1': 2, 'd.2': 3} """ items = [] for k, v in d.items(): new_key = parent_key + sep + k if parent_key else k if isinstance(v, dict): items.extend(flatten(v, new_key, sep=sep).items()) elif isinstance(v, (tuple, list, set)): items.extend( flatten( dict([(new_key + '.' + str(idx), itm) for idx, itm in enumerate(v)])).items()) else: items.append((new_key, v)) return dict(items)
def items(self): """Explicit use of MutableMapping attributes.""" return MutableMapping.items(self)