Skip to main content
 首页 » 编程设计

python ordereddict 还是 OrderedDict

2025年05月04日30zlslch

我现在很迷茫。我正在使用 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())