【问题标题】:Make ordered dicts behave like normal dicts in yaml.dump output使有序 dicts 在 yaml.dump 输出中表现得像普通 dicts
【发布时间】:2021-09-12 16:31:13
【问题描述】:

当用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() 像普通的Dicts 一样序列化OrderedDicts?我想要的是更具可读性:

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

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

【问题讨论】:

  • 如果速度不是问题,我个人会递归地将任何有序的字典转换为字典。另请注意,在 Python 3 中,dicts 无论如何都是有序的,因此您甚至可能不需要这样做。
  • @Peter *Python 3.7
  • 我的意思是,遍历您的列表并转换为 dict 是否有问题?这似乎微不足道。
  • @juanpa.arrivillaga 它是一个很大的字典和列表字典,嵌套了很多层。可以迭代它,但它需要一个自定义函数,除非你知道一个模块?

标签: python dictionary yaml pyyaml ordereddictionary


【解决方案1】:

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

这段代码:

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

【讨论】:

    猜你喜欢
    • 2015-06-08
    • 2018-07-10
    • 2019-08-28
    • 2018-04-30
    • 2018-07-12
    • 2013-03-05
    • 2017-12-27
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多