Как можно переписать эту функцию для реализации OrderedDict?

У меня есть следующая функция, которая выполняет грубую работу по синтаксическому анализу XML-файла в словарь.

К сожалению, поскольку Словари Python не упорядочены, я не могу циклически перебирать узлы, как мне хотелось бы.

Как мне изменить это, чтобы он выводил упорядоченный словарь, который отражает исходный порядок узлов при цикле с для ].

def simplexml_load_file(file):
    import collections
    from lxml import etree

    tree = etree.parse(file)
    root = tree.getroot()

    def xml_to_item(el):
        item = None
        if el.text:
            item = el.text
        child_dicts = collections.defaultdict(list)
        for child in el.getchildren():
            child_dicts[child.tag].append(xml_to_item(child))
        return dict(child_dicts) or item

    def xml_to_dict(el):
        return {el.tag: xml_to_item(el)}

    return xml_to_dict(root)

x = simplexml_load_file('routines/test.xml')

print x

for y in x['root']:
    print y

Выводы:

{'root': {
    'a': ['1'],
    'aa': [{'b': [{'c': ['2']}, '2']}],
    'aaaa': [{'bb': ['4']}],
    'aaa': ['3'],
    'aaaaa': ['5']
}}

a
aa
aaaa
aaa
aaaaa

Как я могу реализовать коллекций. OrderedDict , чтобы я мог быть уверен в правильном порядке узлов?

XML-файл для справки:

<root>
    <a>1</a>
    <aa>
        <b>
            <c>2</c>
        </b>
        <b>2</b>
    </aa>
    <aaa>3</aaa>
    <aaaa>
        <bb>4</bb>
    </aaaa>
    <aaaaa>5</aaaaa>
</root>
13
задан martineau 17 July 2019 в 17:53
поделиться