2017-07-05 5 views
0

ein Wörterbuch erstellt habeZugriff auf die Liste in einem Wörterbuch in Python

store = {'assetType': "['props','char','env','sets']", 'Height': '871', 'Project': 'AnimationProject1', 'Width': '2048', 'FPS': '24', 'Type': 'Animation', 'Unit': 'cm'} 

Dies ist in einer XML-Datei, so dass ich xml.etree.ElementTree die Datei zu analysieren und find, findall und iter die XML-Dateien zuzugreifen und Die obige Zeile ist, was ich am Ende bekommen habe. Ich benutze eine for-Schleife, um die XML-

import xml.etree.ElementTree as xml 

read = xml.parse(xmlFile) 
#xmlFile is the xmlFile directory 

findBase = read.findall('base') 
#'base' and 'type' are the xml.SubElement used in the xml file. 

for child in findBase: 
    findType = child.iter('type') 
    store = child.attrib 
    for types in findType: 
     store[types.attrib.keys()[0]] = types.attrib.values()[0] 
    print store 
    print store.items()[0][1][3] 

Allerdings würde Ich mag Zugang jetzt Datei zugreifen 'props' von 'assetType' aus dem Wörterbuch oben. Ich versuchte mit store.items()[0][1] und ich bin in der Lage, "['props','char','env','sets']" zu bekommen, aber wenn ich store.items()[0][1][3] mache, anstatt das Wort sets zu bekommen, bekomme ich r statt. Ich verstehe den Grund dafür, weil es die ganze Zeile als Zeichenfolge statt einer Liste von Zeichen registriert hat. Ich habe auch etwas wie store.get("assetType") versucht Das Problem ist das gleiche.

Meine Frage ist, wie kann ich das Wort props, char, env oder sets als Ganzes aus dem Wörterbuch oben anstelle einzelner Buchstaben?

Dank

+0

'von ast Import literal_eval zu konvertieren; literal_eval ("['requis' ',' char ',' env ',' setzt ']") ' – idjaw

+0

Konvertiere dein XML in JSON und lade es dann als Wörterbuch. Dann starte eine neue Karriere als JSON Evangelist. http://www.comitstrip.com/de/2014/05/27/and-thats-how-good-old-xml-disappeared/ – Fabien

Antwort

0

Der assetType Wert ist eine Zeichenfolge, wie Sie erwähnt, dass in eine Liste analysiert werden muss. Ein paar Wege, um es zu tun, wie in den Kommentaren erwähnt. Hier ist ein einfacher JSON-Weg, der leider ziemlich spezifisch für Ihren Fall ist. Die einfachen Anführungszeichen haben keine gültige JSON, daher müssen sie gegen Doubles getauscht werden.

>>> import json 
>>> store = {'assetType': "['props','char','env','sets']", 
'Height': '871', 'Project': 'AnimationProject1', 
'Width': '2048', 'FPS': '24', 'Type': 'Animation', 
'Unit': 'cm'} 
>>> json.loads(store['assetType'].replace("'",'"'))[3] 
u'sets' 
0

Wenn Sie dem Eingang vertrauen können Sie ein eval auf der String-Darstellung Ihrer Liste tun können es in eine richtige Python-Liste

store = {'assetType': "['props','char','env','sets']", 'Height': '871', 'Project': 'AnimationProject1', 'Width': '2048', 'FPS': '24', 'Type': 'Animation', 'Unit': 'cm'} 
asset_types = eval(store['assetType']) 
# Then access the entries in the list 
print asset_types[0] # etc. 
Verwandte Themen