当前位置: 首页 > 面试题库 >

将YAML作为嵌套对象而不是Python中的字典加载

孟杰
2023-03-14
问题内容

我在YAML中有一个配置文件,当前使用yaml.safe_load作为字典加载。为了方便编写代码,我希望将其作为一组嵌套对象加载。引用更深层次的字典很麻烦,并使代码更难阅读。

例:

import yaml
mydict = yaml.safe_load("""
a: 1
b:
- q: "foo"
  r: 99
  s: 98
- x: "bar"
  y: 97
  z: 96
c:
  d: 7
  e: 8
  f: [9,10,11]
""")

目前,我访问诸如

mydict["b"][0]["r"]
>>> 99

我想做的是访问相同的信息,例如

mydict.b[0].r
>>> 99

有没有办法像这样嵌套对象加载YAML?还是我必须滚动自己的类并递归地将这些词典转换为嵌套对象?我猜测namedtuple可以使此过程变得容易一些,但我更喜欢现成的解决方案。


问题答案:

找到了一个方便的库来完全满足我的需要:https :
//github.com/Infinidat/munch

import yaml
from munch import Munch
mydict = yaml.safe_load("""
a: 1
b:
- q: "foo"
  r: 99
  s: 98
- x: "bar"
  y: 97
  z: 96
c:
  d: 7
  e: 8
  f: [9,10,11]
""")
mymunch = Munch(mydict)

(我不得不编写一个简单的方法来将所有下标递归转换为munch,但是现在我可以使用例如

>>> mymunch.b.q
"foo"


 类似资料:
  • 问题内容: 我正在寻找一种优雅的方式来获取数据,该数据使用具有一些嵌套dict和列表(例如javascript样式对象语法)的dict进行属性访问。 例如: 应该以这种方式访问​​: 我认为,没有递归是不可能的,但是获得字典对象样式的一种好方法是什么? 问题答案: 更新:在Python 2.6及更高版本中,请考虑namedtuple数据结构是否满足你的需求: 备选方案(原始答案内容)为: 然后,你

  • 问题内容: Python不允许将字典用作其他字典中的键。有使用非嵌套字典作为键的解决方法吗? 问题答案: 如果您有一本真正不变的字典(尽管我不清楚为什么不只使用成对列表:eg ),那么您可以将其转换为: 成对的元组。您已经在问题中做到了。需要A而不是因为结果依赖于元素的顺序和不变性。 冻结集。从数学的角度来看,这是一种更合适的方法,因为它只需要不可变元素上的 等式关系,而第一种方法除等式外还需要排

  • 问题内容: 我正在尝试将嵌套的字典写入.csv文件。这是一个简单的示例: 这使我得到一个包含两列的表:第一个包含; 第二个包含[2,1,1](或子词典中的相应值)。我想要一个有四列的表:一列对应的列表元素,然后三列对应的列表元素。 问题答案: 更改: 至: 否则,您会尝试向csv编写类似的内容,而您的意思是。 如Padraic所述,您可能希望更改为或避免随机行为。

  • 问题内容: 我在理解Python3中的嵌套字典理解时遇到了麻烦。从下面的示例中得到的结果输出的是正确的结构,没有错误,但仅包含一个内部键:值对。我还没有找到像这样的嵌套字典理解的例子。谷歌搜索“嵌套词典理解python”显示了遗留示例,非嵌套理解或使用其他方法解决的答案。我可能使用了错误的语法。 例: 此示例应返回原始字典,但内部值由修改。 outside_dict词典的结构以及结果: 问题答案:

  • 问题内容: 我有以下字典。 如何根据排序。因此,结果字典将如下所示。 问题答案: 从订购的项目元组列表构造一个: (假设Python 3,在Python 2中应该做同样的事情。)

  • 在给定嵌套字典的情况下,如何构建二叉树?理想情况下,我希望访问根,然后以规则的深度优先或广度优先方式遍历树。 在从嵌套字典构建时间或空间方面的树时,我并不非常关心效率,所以我不介意在这个过程中使用额外的数据结构。我的主要关注点是一个全面而直观的解决方案。我现在不知道从哪里开始,所以非常感谢任何帮助。 这是二叉树的样子: