У меня есть скрипт python, который анализирует XML-файл, содержащий информацию о детали, а также команду о том, что сценарий должен делать с информацией.Многомерный словарь в Python
<?xml version="1.0"?>
<servicexml>
<action>
<command>Add</command>
<partnumber>1223</partnumber>
<partname>Battery</partname>
<partdescription>Holds charge</partdescription>
</action>
<action>
<command>Add</command>
<partnumber>4444</partnumber>
<partname>Pump</partname>
<partdescription>Pumps stuff</partdescription>
</action>
</servicexml>
Я пытаюсь написать питон скрипт, который будет раздеться всю соответствующую информацию и поместить его в словарь, так что я могу посмотреть значения по ключу. В настоящее время мой код может содержать только одно измерение - это означает, что в моем XML-файле последний тег является единственным значением, написанным. Как я могу динамически распределять измерения в моем словаре для хранения нескольких действий из моего XML-файла? Таким образом, я могу получить доступ к ключевым значениям для каждой последовательности.
Вот мой Python код
from lxml import etree
from StringIO import StringIO
actionInformation = []
tagsOfInterest = ['command','partnumber','partname','partdescrip']
tagDataOfIntrest = {}
xmlFile = "parts.xml"
context = etree.iterparse(xmlFile)
for action, elem in context:
if elem.tag in tagsOfInterest:
actionInformation.append([elem.tag,elem.text])
tagDataOfInterest = dict(actionInformation)
print tagDataOfInterest
РЕШЕНИЕ На основе Ответ Дэвида Альбера в
мне пришлось изменить некоторые из импортируемых модулей, однако его метод до сих пор используется.
from lxml import etree
xmlFile = "parts.xml"
context = etree.parse(xmlFile)
actions = context.findall('action')
parsed = [{field.tag: field.text for field in action} for action in actions]
Вы можете создать список словарей, где каждый элемент списка соответствует одному из 'action's. Например, у вас будет '[{'command': 'Добавить', 'partnumber': 1223, 'partname': 'Battery', 'partdescription': 'Holds charge'}, {'command': 'Add', ' 'partnumber': 4444, 'partname': 'Pump', 'partdescription': 'Pumps stuff'}] '. Что-то в этом духе подходит вам? –
Это в основном то, что я пытался выполнить. Таким образом, я мог бы легко получить доступ к любому из отдельных клавиш действия. – user1130161