import collections class SafeDict(dict): def __missing__(self, key): return '{' + key + '}' # from https://stackoverflow.com/questions/6027558/flatten-nested-python-dictionaries-compressing-keys def flatten(d, parent_key='', sep='/'): 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)