【问题标题】:Python: Setting Keys in Nested Dictionaries [closed]Python:在嵌套字典中设置键[关闭]
【发布时间】:2012-12-09 00:15:30
【问题描述】:

与我真正想提出的问题相比,标题相当简单,但我不太确定如何措辞。 对于我正在制作的一个 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 文档的确切结构的情况下以正确的格式嵌套字典,如上所示?

【问题讨论】:

  • 你的问题是什么?
  • 对帖子进行了编辑。对不起!
  • 将 XML 结构存储在嵌套字典中是否重要?如果是这样,为什么?在 Python 中使用 XML 有更方便的方法。

标签: python loops dictionary nest


【解决方案1】:

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

【讨论】:

  • 如果堆栈有,比如说,["Person", "Skills"],那么调用 peek() 方法就不会返回 "Skills",从而将值分配给 Dict["Skills" "],而不是 Dict["Person"]["Skills"]?
  • 我明白你的意思。您可以将引用保存在堆栈上的字典中。每次遇到打开标签时,您都会创建一个新的嵌套,例如prevLevel['Skills'] = {} 并将新字典推入堆栈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 2018-12-01
  • 2018-05-23
  • 2021-05-10
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多