Свести многоуровневый вложенный словарь в Python - PullRequest
0 голосов
/ 01 мая 2020

У меня есть многоуровневый вложенный словарь, и я пытаюсь сделать из него 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')])])]))
...