====== Python: Dict ====== * nested dict to flatten dict import pandas as pd d = {'a': 1, 'c': {'a': 2, 'b': {'x': 5, 'y' : 10}}, 'd': [1, 2, 3]} df = pd.json_normalize(d, sep='.') print(df.to_dict(orient='records')[0]) # https://stackoverflow.com/questions/6027558/flatten-nested-dictionaries-compressing-keys * nested dict to object from types import SimpleNamespace import json class Config(SimpleNamespace): def __init__(self, config_dict): super().__init__(**config_dict) def dict2obj(d): return json.loads(json.dumps(d), object_hook=Config) config_dict = {'a': 1, 'b': {'c': 2}, 'd': ['hi', {'foo': 'bar'}]} config = dict2obj(config_dict) print(config.a) # https://stackoverflow.com/questions/1305532/convert-nested-python-dict-to-object * nested dict to namedtuple from collections import namedtuple def make_config(cfg): if isinstance(cfg, dict): return make_config_dict(cfg) elif isinstance(cfg, list): return make_config_list(cfg) else: raise NotImplementedError() def make_config_dict(cfg): Config = namedtuple('Config', cfg.keys()) values = list() for value in cfg.values(): if isinstance(value, dict): value = make_config_dict(value) elif isinstance(value, list): value = make_config_list(value) values.append(value) return Config(*values) def make_config_list(cfg): values = list() for value in cfg: if isinstance(value, dict): value = make_config_dict(value) elif isinstance(value, list): value = make_config_list(value) values.append(value) return values config_dict = {'a': 1, 'b': {'c': 2}, 'd': ['hi', {'foo': 'bar'}]} config = make_config(config_dict) print(config) {{tag>python dict}}