我现在很迷茫。我正在使用 PyYAML 编辑一些 YAML 文件。
data = yaml.load_all(open('testingyaml.yaml'),Loader=yaml.RoundTripLoader)
我的 testingyaml.yaml 文件包含以下内容:
spring:
profiles: dev
datasource:
url: jdbc:postgresql://127.0.0.1:5432/nfvgrid
dns:
enable: false
cassandra:
host: 192.168.7.151
当我打印数据时,它会打印以下内容:
ordereddict([('spring', ordereddict([('profiles', 'dev'), ('datasource', ordereddict([('url', 'jdbc:postgresql://127.0.0.1 :5432/nfvgrid')]))])), ('dns', ordereddict([('enable', False)])), ('cassandra', ordereddict([('host', '192.168.7.151' )]))])
我还想对这个有序字典执行一些操作,但 python 抛出错误 NameError: name 'ordereddict' is not defined
通常是 OrderedDict 但 PyYAML 以某种方式返回 ordereddict。 我该如何解决这个问题?
请您参考如下方法:
您几乎可以肯定没有按照说明使用 pyyaml,因为它没有 RoundTripLoader。相反,您可能正在使用 ruamel.yaml .
此替代方案使用自己的 ruamel.ordereddict在 python 2 安装上, native collections.OrderedDict 在 python 3 上。此替代方案支持 OrderedDict 执行的大多数操作,因此您没有理由不能操作它。请参阅其文档。
但是,如果你想从一个转换为另一个,你可以这样做:
x = collections.OrderedDict(some_ruamel_ordered_dict.items())
