Python:在嵌套字典中设置键

时间:2012-12-09 00:15:31

标签: python loops dictionary nest

与我真正想要的问题相比,标题相当简单,但我不太清楚如何说出来。 对于我正在制作的XML解析模块,我需要根据XML文档的确切结构添加键和属性,例如:

<Person>
    <Name>Someone</Name>
    <Age>25</Age>
    <Skills>
    <Skill>Projectile vomiting</Skill>
    </Skills> 
</Person>

应该返回:

{ "Person" : { "Name" : "Someone", "Age" : "25", "Skills" : { "Skill" : "Projectile vomiting"}}}

...没有程序知道XML文档的确切结构。它可以有任意数量的属性,任意数量的嵌套属性。

使用

Dict["key"]["anotherkey"]["yetanotherkey"] = Value

不起作用,因为我不知道XML文档是否使用3个属性嵌套,或者这些属性嵌套是否包含更多嵌套。

我的想法是每次解析器遇到一个嵌套的开头时“打开一个节点”,换句话说,如果解析器到达

<Skill> 

它会在

中分配属性
<Skills> and </Skills> 

到Dict [“Person”] [“Skills”],以及何时

</Skills>
遇到

,它将“关闭”节点,并继续为Dict [“Person”]分配属性,但我不知道如何实现它(但我可以获得所有的值,属性和节点文件)。

如何在不知道XML文档的确切结构的情况下以正确的格式嵌套字典,如上所示?

1 个答案:

答案 0 :(得分:2)

您可以使用与您在XML文档中的位置相对应的堆栈。每次遇到打开的标记时,都会将其推入堆栈并开始在stack.peek()处填充值的属性。当您遇到结束标记时,您会从堆栈中弹出最后一个标记,并且知道您现在将在堆栈的新顶部填充标记的属性。