如何用Python ElementTree从XML数据集生成列表的列表?
要实现按<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)
关键说明
- 按文章分组的核心:使用
root.findall('article')获取所有文章节点,确保我们是按文章维度处理,而不是直接全局抓取所有作者。 - 文本处理:
strip()用于去除示例XML中作者文本前后的空格,避免结果中出现多余空白。 - 关于原代码的问题:你原代码中调用
author.attrib['pid']会触发KeyError,因为示例XML里的<author>节点并没有pid属性,如果实际数据中有该属性,再保留这部分逻辑即可。
关于“特定函数”的问题
ElementTree没有专门生成这种分组列表的内置函数,但通过上述嵌套遍历或列表推导的方式,就是最直接高效的实现方式,完全不需要额外依赖工具。
内容的提问来源于stack exchange,提问作者Adi OS
相关产品推荐
相关产品推荐

