在 yaml.dump 输出中使有序的字典表现得像普通的字典

Make ordered dicts behave like normal dicts in yaml.dump output

当用 yaml.dump() 序列化一个 OrderedDict 时,由于有很多破折号,输出很难理解:

refine: !!python/object/apply:collections.OrderedDict
- - - root
    - Wuhan/Hu-1/2019
  - - clock_rate
    - 0.0007
  - - clock_std_dev
    - 0.0003

有没有办法让 yaml.dump() 像正常的 Dict 一样序列化 OrderedDict?我想要的是更具可读性:

refine:
  root: Wuhan/Hu-1/2019
  clock_rate: 0.0007
  clock_std_dev: 0.0003

我是否需要遍历整个变量(它由数百个字典组成,以上只是摘录)并将所有 OrderedDict 转换为 Dict 还是有一个 in - yaml.dump() 的内置功能或为我执行此操作的类似库?

使用 ruamel.yaml 代替 PyYAML 立即解决了问题。 OrderedDict在输出中不再表示为列表。

此代码:

import ruamel.yaml

yaml=ruamel.yaml.YAML()
yaml.dump()

产生更整洁的输出:

refine: !!omap
- root: Wuhan/Hu-1/2019
- clock_rate: 0.0007
- clock_std_dev: 0.0003