我有一些使用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)
这似乎过于冗余
我错过了一些可以清理这一点的东西吗?
仅供参考我这样做是因为对于每种类型,我必须匹配相关文档中的其他一些数据
早期的答案表明我需要澄清一点 - 我想避免三次穿过树
你可以这样做:
for i in range(1, 4):
type_dict['type_%d' % i] = myTree.cssselect('element_type_%d' % i)
Run Code Online (Sandbox Code Playgroud)