Ich habe die folgende Funktion, die eine grobe Arbeit der Analyse einer XML-Datei in ein Wörterbuch tut.Wie kann diese Funktion neu geschrieben werden, um OrderedDict zu implementieren?
Leider, da Python-Wörterbücher nicht geordnet sind, kann ich nicht durch die Knoten, wie ich möchte.
Wie ändere ich das, so dass es ein geordnetes Wörterbuch ausgibt, das die ursprüngliche Reihenfolge der Knoten widerspiegelt, wenn es mit 'for' geloopt wird.
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
Ausgänge:
{'root': {
'a': ['1'],
'aa': [{'b': [{'c': ['2']}, '2']}],
'aaaa': [{'bb': ['4']}],
'aaa': ['3'],
'aaaaa': ['5']
}}
a
aa
aaaa
aaa
aaaaa
Wie kann ich collections.OrderedDict implementieren, so dass ich sicher sein kann, die richtige Reihenfolge der Knoten zu bekommen?
XML-Datei als Referenz:
<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>
Duplikat http zu tun: // Stackoverflow. com/questions/4123266/python-schleifen-scheint-nicht-folgen-reihenfolge vom selben autor. –