You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python ElementTree从XML数据集生成列表的列表?

解决方案:用ElementTree按article分组提取author为列表的列表

要实现按<article>分组的列表的列表,核心是先遍历每个文章节点,再在节点内收集作者,而不是全局遍历所有作者节点。

修正后的代码实现(循环方式)

import xml.etree.ElementTree as ET

tree = ET.parse('data.xml')
root = tree.getroot()

author_groups = []
# 遍历每个article节点
for article in root.findall('article'):
    # 收集当前文章下所有作者的文本,去除前后空白字符
    current_authors = [author.text.strip() for author in article.findall('author')]
    author_groups.append(current_authors)

print(author_groups)
# 输出结果: [['Tony'], ['Andy', 'John'], ['Paul', 'leon']]

更简洁的列表推导式写法

import xml.etree.ElementTree as ET

tree = ET.parse('data.xml')
root = tree.getroot()

author_groups = [[auth.text.strip() for auth in art.findall('author')] for art in root.findall('article')]

print(author_groups)

关键说明

  1. 按文章分组的核心:使用root.findall('article')获取所有文章节点,确保我们是按文章维度处理,而不是直接全局抓取所有作者。
  2. 文本处理:strip()用于去除示例XML中作者文本前后的空格,避免结果中出现多余空白。
  3. 关于原代码的问题:你原代码中调用author.attrib['pid']会触发KeyError,因为示例XML里的<author>节点并没有pid属性,如果实际数据中有该属性,再保留这部分逻辑即可。

关于“特定函数”的问题

ElementTree没有专门生成这种分组列表的内置函数,但通过上述嵌套遍历或列表推导的方式,就是最直接高效的实现方式,完全不需要额外依赖工具。

内容的提问来源于stack exchange,提问作者Adi OS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:40:27