python - 从标记数据中选择多种元素类型的更多 pythonic 方法

标签 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>

所以在这种情况下,我拥有所有三种类型,但每种类型只有一种,但是任何类型都可以达到任意数量。

我通过在函数中使用 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/

相关文章:

python - 在 asdict 或序列化的数据类中包含属性的推荐方法是什么?

python - Pyodbc 错误 - Python 到 MS Access

python - 绘制几年的日期时间,但在 x 轴上仅显示十二个月

c++ - 使用 gcc 4.2 在 Mac OS X 10.6.8 上安装 lxml

python - lxml 和 CDATA 和 &

python - 身份验证结果为 404 代码

python - 在python中实时播放原始音频文件

python - 从周围的框架中获取 locals()

python - bs4.FeatureNotFound : . .. lxml 与 MacOS 和 Conda/Python 3

python - HTML 表格特定行抓取