使用Python生成字典

问题描述 投票:0回答:1

我有一些 xml 数据想用生成器组织成一个字典,我只想要子容器:

xml_file = '\
<Container>\
    <Main Type="main1" var1="var1"/>\
    <SubContainer1>\
        <Sub Type="sub1" var1="var1" var2="var2"/>\
        <Sub Type="sub2" var1="var1" var2="var2"/>\
    </SubContainer1>\
    <SubContainer2>\
        <Var ObjectId="0000000001" Name="Name1" Value="1" />\
        <Var ObjectId="0000000001" Name="Name2" Value="2" />\
        <Var ObjectId="0000000001" Name="Name3" Value="3" />\
        <Var ObjectId="0000000001" Name="Name4" Value="4" />\
        <Var ObjectId="0000000001" Name="Name5" Value="5" />\
        <Var ObjectId="0000000001" Name="Name6" Value="6" />\
    </SubContainer2>\
</Container>'

xml_tree = Etree.fromstring(xml_file)
xml_dict = {}

sub_containers = ['SubContainer1','SubContainer2']
for c in sub_containers:
    xml_dict[c] = [{x.tag : x.attrib} for x in xml_tree.findall(f'.//{c}/*')]

print(xml_dict)

不幸的是,生成器给了我一个像这样的列表:

{'SubContainer1': [{'Sub': {'Type': 'sub1', 'var1': 'var1', 'var2': 'var2'}}, {'Sub': {'Type': 'sub2', 'var1': 'var1', 'var2': 'var2'}}], 'SubContainer2': [{'Var': {'ObjectId': '0000000001', 'Name': 'Name1', 'Value': '1'}}, {'Var': {'ObjectId': '0000000001', 'Name': 'Name2', 'Value': '2'}}, {'Var': {'ObjectId': '0000000001', 'Name': 'Name3', 'Value': '3'}}, {'Var': {'ObjectId': '0000000001', 'Name': 'Name4', 'Value': '4'}}, {'Var': {'ObjectId': '0000000001', 'Name': 'Name5', 'Value': '5'}}, {'Var': {'ObjectId': '0000000001', 'Name': 'Name6', 'Value': '6'}}]}

我必须像这样笨拙地访问字典: xml_dict['SubContainer1'][0] [0] 肯定可以以某种方式避免,但我太没有经验了。你能帮我从 xml 构建一个正确的字典吗?

python dictionary generator dictionary-comprehension
1个回答
0
投票

更改这部分代码:

sub_containers = ['SubContainer1', 'SubContainer2']
for c in sub_containers:
    xml_dict[c] = [{x.tag: x.attrib} for x in xml_tree.find(f'.//{c}').iter() if x.tag != c]
© www.soinside.com 2019 - 2024. All rights reserved.