Python:用于for循环的compact / one liner

时间:2013-08-22 22:27:44

标签: python xml

我有以下代码可以工作并给我预期的输出。

#!/bin/env python
import xml.etree.ElementTree as e
tree = e.parse("Document.XML")
root = tree.getroot()
vals=[]

代码的以下部分可以是单行还是更紧凑?

for ch in root.findall('arch'):
    for gc in ch.findall('pro'):
        vals.append(gc.get('label'))

我拥有的libxml2版本不支持xpath,请不要建议该选项。 XMl文件如下所示:

<projects>
  <arch name="arch1">
    <pro label="A1" type="B1" state="C1"/>
    ....
  </arch>
  ....
</projects>

2 个答案:

答案 0 :(得分:6)

当然,使用带有两个循环的列表推导:

vals = [gc.get('label') for ch in root.findall('arch') for gc in ch.findall('pro')]

答案 1 :(得分:1)

使用xmltodict你可以做一些像

这样的事情
data = xmltodict.parse("Document.XML")
val = data['arch']['pro']['@label']

你必须使用我的伪代码来为多个val添加列表理解,但上面应该说明基本用法(并参见git页面)。 Bruno Rocha最近发表了关于xmltodict的博文。