def flatten(structure, key='', path='', flattened=None):
    if flattened is None:
        flattened = {}
if type(structure) not in (dict, list):
    flattened[(path + '_' if path else '') + key] = structure
elif isinstance(structure, list):
    for i, item in enumerate(structure):
        flatten(item, '%d' % i, path + '_' + key, flattened)
else:
    for new_key, value in list(structure.items()):
        flatten(value, new_key, path + '_' + key, flattened)
Сведение списка диктовок списков диктовок (и т. д.) неизвестной глубины в Python (кошмарная структура JSON)