Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:在嵌套字典中设置键_Python_Loops_Dictionary_Nest - Fatal编程技术网

Python:在嵌套字典中设置键

Python:在嵌套字典中设置键,python,loops,dictionary,nest,Python,Loops,Dictionary,Nest,与我真正想提出的问题相比,这个标题相当简单,但我不太确定如何用词。 对于我正在制作的XML解析模块,我需要它根据XML文档的确切结构添加键和属性,例如: <Person> <Name>Someone</Name> <Age>25</Age> <Skills> <Skill>Projectile vomiting</Skill> </Skills>

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

<Person>
    <Name>Someone</Name>
    <Age>25</Age>
    <Skills>
    <Skill>Projectile vomiting</Skill>
    </Skills> 
</Person>
…程序不知道XML文档的确切结构。它可以有任意数量的属性,任意数量的嵌套属性

使用

Dict["key"]["anotherkey"]["yetanotherkey"] = Value
不起作用,因为我不知道XML文档是否使用3个属性嵌套,或者这些属性嵌套是否包含更多的嵌套

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

<Skill> 
它将在内部分配属性

<Skills> and </Skills> 
口述[个人][技能],以及何时口述

</Skills>
遇到时,它将关闭节点,并继续为Dict[Person]分配属性,但我不知道如何实现,但我可以获得文档的所有值、属性和节点


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

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

您的问题是什么?对文章进行了编辑。很抱歉将XML结构存储在嵌套dict中是否重要?若然,原因为何?在Python中使用XML有更方便的方法。如果堆栈有,比如说,[Person,Skills],调用peek方法不只是返回Skills,从而将值赋给Dict[Skills],而不是Dict[Person][Skills]?我明白你的意思了。您可以将引用保存到堆栈上的词典中。每次遇到打开的标记时,您都会创建一个新的嵌套,例如prevLevel['Skills']={},并将新的dict推送到堆栈上。
</Skills>