Python XML解析:如何将多个字典的Key5值提取到单个列表
解决XML属性提取重复值的问题
问题原因分析
- 列表初始化位置错误:原代码中
l = []放在for x in root[2:]循环内部,每次处理一个元素都会重置列表,无法累积多个元素的结果。 - 多余的内层循环:
for d in attributes会遍历当前元素的所有属性键,每次循环都添加同一个Key5的值,导致单个元素的Key5被重复添加(次数等于属性的数量)。 - 无全局结果存储:原代码没有保留跨文件的收集结果,最终无法得到所有文件的Key5值集合。
修正后的代码
import xml.etree.ElementTree as ET import os path = "directory/here" # 全局列表存储所有Key5的值 key5_values = [] for filenames in os.listdir(path): if filenames.endswith('.xml'): fullnames = os.path.join(path, filenames) tree = ET.parse(fullnames) root = tree.getroot() for x in root[2:]: attributes = x.attrib # 直接提取当前元素的Key5值,非空则加入列表 key5_val = attributes.get("Key5") if key5_val: key5_values.append(key5_val) # 输出最终结果 print(key5_values)
修正说明
- 将列表
key5_values初始化移到所有循环外部,确保可以累积所有文件、所有目标元素的Key5值。 - 移除遍历属性的内层循环,直接通过
attributes.get("Key5")提取目标属性值,避免重复添加同一值。 - 增加非空判断,防止无Key5属性的元素向列表中添加
None值(可根据实际需求移除该判断)。
内容的提问来源于stack exchange,提问作者Bronko
相关产品推荐
相关产品推荐

