更多pythonic方式从标记数据中选择多个元素类型

PyN*_*bie 2 python lxml

我有一些使用lxml处理的标记数据.当我打开文件时,如果我有三种类型的元素中的一种或多种(我可以有一个,两个或三个不同的元素以及我所拥有的任何类型的多个实例),那么在打开文件之前我不知道

我需要有关元素的子标记中包含的这些元素的一些信息

<element_type_1>
        <name>joe smith</name>
</element_type_1>
<element_type_2>
        <name>mary smith</name>
</element_type_2>
<element_type_3>
        <name>patrick smith</name>
</element_type_3>
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,我有三种类型,但每种类型只有一种,但是任何类型都可以有一些任意大量的数字.

cssselect在我的函数中使用了3次来获取元素

def get_types(myTree):
    type_dict=defaultdict(list)
    type_dict['type_1']=myTree.cssselect('element_type_1')
    type_dict['type_2']=myTree.cssselect('element_type_2')
    type_dict['type_3']=myTree.cssselect('element_type_3')
    ret type_dict
Run Code Online (Sandbox Code Playgroud)

这似乎过于冗余

我错过了一些可以清理这一点的东西吗?

仅供参考我这样做是因为对于每种类型,我必须匹配相关文档中的其他一些数据

早期的答案表明我需要澄清一点 - 我想避免三次穿过树

jte*_*ace 5

你可以这样做:

for i in range(1, 4):
    type_dict['type_%d' % i] = myTree.cssselect('element_type_%d' % i)
Run Code Online (Sandbox Code Playgroud)