将XML转换为python中的词典列表

2024-09-28 05:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,请像对待我一样对待我。 当我尝试将XML内容转换为字典列表时,我得到了输出,但并没有达到预期效果,并且尝试了很多方法

XML内容:

<project>
    <panelists>
        <panelist panelist_login="pradeep">
            <login/>
            <firstname/>
            <lastname/>
            <gender/>
            <age>0</age>
        </panelist>
        <panelist panelist_login="kumar">
            <login>kumar</login>
            <firstname>kumar</firstname>
            <lastname>Pradeep</lastname>
            <gender/>
            <age>24</age>
        </panelist>
    </panelists>
</project>

我使用的代码:

import xml.etree.ElementTree as ET

tree = ET.parse(xml_file.xml)   # import xml from
root = tree.getroot()  

Panelist_list = []

for item in root.findall('./panelists/panelist'):    # find all projects node
    Panelist = {}              # dictionary to store content of each projects
    panelist_login = {}
    panelist_login = item.attrib
    Panelist_list.append(panelist_login)
    for child in item:

      Panelist[child.tag] = child.text

    Panelist_list.append(Panelist)

print(Panelist_list)

输出:

[{
  'panelist_login': 'pradeep'
}, {
  'login': None,
  'firstname': None,
  'lastname': None,
  'gender': None,
  'age': '0'
}, {
  'panelist_login': 'kumar'
}, {
  'login': 'kumar',
  'firstname': 'kumar',
  'lastname': 'Pradeep',
  'gender': None,
  'age': '24'
}]

我期待下面的输出

[{
  'panelist_login': 'pradeep',
  'login': None,
  'firstname': None,
  'lastname': None,
  'gender': None,
  'age': '0'
}, {
  'panelist_login': 'kumar'
  'login': 'kumar',
  'firstname': 'kumar',
  'lastname': 'Pradeep',
  'gender': None,
  'age': '24'
}]

我在xml树上提出了很多堆栈溢出问题,但仍然没有帮到我

欢迎提供任何帮助/建议


Tags: noneageloginxmlfirstnameitemgenderlist
1条回答
网友
1楼 · 发布于 2024-09-28 05:23:28

您的代码将带有标记属性的dictpanelist_login附加到列表中,在这一行:Panelist_list.append(panelist_login)Panelistdict分开。因此,对于每个<panelist>标记,代码将附加两个dict:一个标记属性的dict和一个子标记的dict。在循环内部有2个append()调用,这意味着每次通过循环时列表中有2个项目

但是实际上,您希望每个<panelist>标记都有一个dict,并且希望tag属性在Panelistdict中显示为,就好像它也是一个子标记一样

因此,使用单个dict,并使用标记属性更新Panelistdict,而不是将标记属性保留在单独的dict中

for item in root.findall('./panelists/panelist'):    # find all projects node
    Panelist = {}              # dictionary to store content of each projects
    panelist_login = item.attrib
    Panelist.update(panelist_login) # make panelist_login the first key of the dict
    for child in item:
      Panelist[child.tag] = child.text
    Panelist_list.append(Panelist)
print(Panelist_list)

我得到了这个输出,我想这就是你的想法:

[
  {'panelist_login': 'pradeep', 
  'login': None, 
  'firstname': None, 
  'lastname': None, 
  'gender': None, 
  'age': '0'}, 
  {'panelist_login': 'kumar', 
  'login': 'kumar', 
  'firstname': 'kumar', 
  'lastname': 'Pradeep', 
  'gender': None, 
  'age': '24'}
 ]

相关问题 更多 >

    热门问题