小编典典

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

python

我在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可以使此过程变得容易一些,但我更喜欢现成的解决方案。


阅读 213

收藏
2020-12-20

共1个答案

小编典典

找到了一个方便的库来完全满足我的需要: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"
2020-12-20