字典键:值

时间:2015-07-26 18:54:13

标签: python xml dictionary xml-parsing

key:value对中的值是否可以作为列表?我试图找到一种有效解析大型XML文件的方法。一般格式为:

<things>
    <parameters>
        <various parameters> 
    </parameters>
    <thing id="1" comment="thing1">
        <nodes>
            <node id="1" x="1" y="1" z="1"/>
            <node id="2" x="2" y="2" z="2"/>
        </nodes>
        <edges>
            <edge source="1" target="2"/>
        </edges>
    </thing>
    <thing id="N" comment="thingN">
        <nodes>
            <node id="3" x="3" y="3" z="3"/>
            <node id="4" x="4" y="4" z="4"/>
        </nodes>
        <edges>
            <edge source="3" target="4"/>
        </edges>
    </thing>
    <comments>
        <comment node="1" content="interesting feature"/>
        <comment node="4" content="interesting feature"/>
    </comments>
</things> 

其中可以有任何数量的东西&#34;元素,每个元素都可以包含任意数量的节点&#34;元素。节点元素包含体素坐标。我想知道哪些东西 - 体素对靠近其他东西 - 体素对。例如,是东西5节点8附近的东西1节点7?我不想在相同的事物中确定节点的接近度(例如,我不想找到1节点1是否接近1节点9;&#34; edge&#34;数据处理这个)。

目前,我将所有数据转储到一个大列表中,并使用一堆for循环和if语句遍历列表。它有效,但速度很慢,部分原因是它逐点移动并不断询问被比较的两个节点是否在同一个东西中。我认为使用字典结构可以加快速度,但我是新手。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以从XML字符串创建ElementTree

from xml.etree import ElementTree as ET

xml = """<note>
             <to>Monti</to>
             <from>Python</from>
             <heading>Reminder</heading>
             <body>Spam!</body>
         </note>"""

tree = ET.fromstring(xml)

然后,您可以遍历树,我们使用字典理解来映射标记和文本。

>>> {c.tag: c.text for c in tree.getchildren()}
{'body': 'Spam!', 'from': 'Python', 'heading': 'Reminder', 'to': 'Monti'}