Ejemplo n.º 1
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
 def items(self):
     """Explicit use of MutableMapping attributes."""
     return MutableMapping.items(self)