Python:防止字典的键被覆盖

标签 python xml lxml

我正在尝试将 xml 文档转换为 Python 数据结构。

XML 示例:

    <SOFTWARES>
        <PUBLISHER>Microsoft Corporation</PUBLISHER>
        <NAME>Microsoft Office Visio 2010</NAME>
        <VERSION>14.0.6029.1000</VERSION>
        <FOLDER>C:/Program Files/Microsoft Office/</FOLDER>
        <LANGUAGE>Language Neutral</LANGUAGE>
        <INSTALLDATE>2012/03/29</INSTALLDATE>
    </SOFTWARES>
    <SOFTWARES>
        <PUBLISHER>Microsoft</PUBLISHER>
        <NAME>Update for Microsoft Office 2010 (KB2553310) 64-Bit Edition</NAME>
        <INSTALLDATE>0000//0/0/00</INSTALLDATE>
    </SOFTWARES>

lxml.de 有一个很好的例子:http://lxml.de/FAQ.html#how-can-i-map-an-xml-tree-into-a-dict-of-dicts

def xml_to_dict(element):
    return element.tag, dict(map(xml_to_dict, element)) or element.text

这会产生一个很棒的字典,但只有一个缺陷。它将覆盖现有的键。因此,当该过程完成后,我得到:

'SOFTWARES': {
    'PUBLISHER': 'Microsoft',
    'NAME': 'Update for Microsoft Office 2010 (KB2553310) 64-Bit Edition',
    'INSTALLDATE': '0000//0/0/00',
},

这是最后一个软件 block ,无论它之前有多少个。 lxml 的函数运行良好,因为它是递归的,但我想编写一些可以处理重复键的东西。最好只需将 SOFTWARES 字典放入列表中,到时候我就可以迭代该列表。

最佳答案

此特定情况的最简单解决方案:

map(xml_to_dict, xml_document)

这将为您提供字典列表。

关于Python:防止字典的键被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10108296/

相关文章:

python - 使用Pandas导出csv时如何指定数据类型和格式?

python - 在 __init__() python 中打开文件

python - 在 OSX 10.9 中安装 lxml

python - 如何使用 xpath & lxml 获取节点的全部内容?

python - Keras层输出和输入之间的差异

android - 未处理的异常 : Android. Views.InflateException:二进制 XML 文件行 #1:二进制 XML 文件行 #1:类 fragment 膨胀时出错

xml - 去哪里申请语言设计审查?

xml - 如何在 Linux 中解析相同命名的 XML 元素内容?

Python:使用 lxml 从 Open Office calc 导入数据

python - 绘制直方图箱的箱线图以进行直方图比较