我现在很困惑。我正在使用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。我该如何解决这个问题?
发布于 2016-02-03 06:40:16
几乎可以肯定的是,您使用的不是如上所述的pyyaml,因为它没有RoundTripLoader。相反,您可能正在使用ruamel.yaml。
此备选方案在Python2安装上使用自己的ruamel.ordereddict,在Python3上使用原生collections.OrderedDict。此备选方案支持OrderedDict所执行的大多数操作,因此您没有理由不能操作它。请参阅其文档。
但是,如果您希望从一个转换为另一个,则可以执行以下操作:
x = collections.OrderedDict(some_ruamel_ordered_dict.items())https://stackoverflow.com/questions/35164913
复制相似问题