我有一些正在使用 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>
所以在这种情况下,我拥有所有三种类型,但每种类型只有一种,但是任何类型都可以达到任意数量。
我通过在函数中使用 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
这似乎过于多余了
我是否遗漏了一些可以稍微清理一下的东西?
仅供引用,我这样做是因为对于每种类型,我都必须匹配相关文档中的一些其他数据
早期的答案表明我需要澄清一点——我想避免三次穿过树
最佳答案
你可以这样做:
for i in range(1, 4):
type_dict['type_%d' % i] = myTree.cssselect('element_type_%d' % i)
关于python - 从标记数据中选择多种元素类型的更多 pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11712971/