def flat()

in variance-analysis/mach_perftest_notebook_dev/perftestnotebook/utilities.py [0:0]


def flat(data, parent_dir):
    """
    Converts a dictionary with nested entries like this
        {
            "dict1": {
                "dict2": {
                    "key1": value1,
                    "key2": value2,
                    ...
                },
                ...
            },
            ...
            "dict3": {
                "key3": value3,
                "key4": value4,
                ...
            }
            ...
        }
    
    to a "flattened" dictionary like this that has no nested entries:
        {
            "dict1.dict2.key1": value1,
            "dict1.dict2.key2": value2,
            ...
            "dict3.key3": value3,
            "dict3.key4": value4,
            ...
        }

    :param Iterable data : json data.
    :param tuple parent_dir: json fields. 

    :return dict: {subtest: value}
    """
    ret = {}

    def _helper(data, parent_dir):
        if isinstance(data, list):
            for item in data:
                _helper(item, parent_dir)
        elif isinstance(data, dict):
            for k, v in data.items():
                current_dir = parent_dir + (k,)
                subtest = ".".join(current_dir)
                if isinstance(v, Iterable):
                    _helper(v, current_dir)
                elif v or v == 0:
                    ret.setdefault(subtest, []).append(v)

    _helper(data, parent_dir)

    return ret