Как из сложной структуры словарей и списков получить DataFrame?

Есть сложный список словарей со следующей структурой:

test_list = [{'Супермаркет': ['Адрес1', 'Адрес2', 'Адрес_n'],  
              'Гипермаркет': ['Адрес 1', 'Адрес2', 'Адрес_n']}, 
             {'Супермаркет': ['Адрес3', 'Адрес4', 'Адрес_n+1'],  
              'Гипермаркет': ['Адрес 3', 'Адрес4', 'Адрес_n+1']}]

В итоге получается вот такой список словарей:

for el in test_list: 
**el(keys()):**
dict_keys(['Супермаркет', 'Гипермаркет'])
dict_keys(['Супермаркет', 'Гипермаркет'])
dict_keys(['Супермаркет'])
dict_keys(['Супермаркет'])
dict_keys(['Супермаркет'])
dict_keys(['Супермаркет', 'Гипермаркет'])

**el(values()):**
dict_values([['адрес', 'адрес'], ['адрес']])
dict_values([['адрес'], ['адрес']])
dict_values([['адрес']])
dict_values([['адрес']])
dict_values([['адрес']])
dict_values([['адрес', 'адрес'], ['адрес']]])

Пришлось сделать такую структуру, потому что исследуемая сеть находится по всей стране и имеет несколько форматов, а парсер перебирает id каждого региона и в каждом регионе получается словарь с ключом-форматом: и значением [список адресов].

Значения получил, но теперь не могу понять, как всё это преобразовать в читабельный DataFrame со следующими колонками: 'Формат', 'Адрес'.

Более-менее получилось формат вывести в колонки. Но это не то, что нужно! Нужно получить формат именно в каждой строке для каждого адреса.


Ответы (1 шт):

Автор решения: MaxU
df = pd.DataFrame([[k,el] for d in test_list for k,v in d.items() for el in v], 
                  columns=["Type", "Address"])

результат:

In [405]: df
Out[405]: 
           Type    Address
0   Супермаркет     Адрес1
1   Супермаркет     Адрес2
2   Супермаркет    Адрес_n
3   Гипермаркет    Адрес 1
4   Гипермаркет     Адрес2
5   Гипермаркет    Адрес_n
6   Супермаркет     Адрес3
7   Супермаркет     Адрес4
8   Супермаркет  Адрес_n+1
9   Гипермаркет    Адрес 3
10  Гипермаркет     Адрес4
11  Гипермаркет  Адрес_n+1
→ Ссылка