У меня есть многоуровневый вложенный словарь, и я пытаюсь сделать из него pandas фрейм данных. Код ниже работает нормально до уровня n-1. К сожалению, последний уровень все еще остается OrderedDict []. Для справки я использую код из этой темы: Сглаживание вложенных словарей, сжатие ключей
from collections import Mapping
from itertools import chain
from operator import add
_FLAG_FIRST = object()
def flattenDict(d, join=add, lift=lambda x:x):
results = []
def visit(subdict, results, partialKey):
for k,v in subdict.items():
newKey = lift(k) if partialKey==_FLAG_FIRST else join(partialKey,lift(k))
if isinstance(v,Mapping):
visit(v, results, newKey)
else:
results.append((newKey,v))
visit(d, results, _FLAG_FIRST)
return results
Вот небольшой пример того, как выглядят данные:
OrderedDict(
[
('Summary', OrderedDict(
[
('TotalSum', OrderedDict(
[
('@currency', 'USD'), ('Revenue', [OrderedDict(
[
('@asofDate', '2019-12-31'), ('@reportType', 'A'), ('@period', '12M'), ('#text', 'XXXXX')]), OrderedDict(
[
('@asofDate','2013-06-30'), ('@reportType', 'B'), ('@period', '12M'), ('#text', 'XXXXX')])])]))