如何将字典和列表安全转储到YAML中?

我希望将输出作为YAML如下:

 - item: Food_eat
   Food:
     itemId: 42536216
     category: fruit
     moreInfo:
       - "organic"

我已经使用以下代码以与上述相同的顺序打印,但是输出结果与预期不符。

代码:

import yaml

yaml_result = [{'item': 'Food_eat','Food': {'foodNo': 42536216,'type': 'fruit','moreInfo': ['organic']}}]

print(yaml.safe_dump(yaml_result))
print(yaml_test)

输出:

- Food:
    moreInfo:
    - organic
    category: fruit
    itemId: 42536216
  item: Food_eat

不确定如何获得所需的输出。

yimao5788 回答:如何将字典和列表安全转储到YAML中?

ruamel.yaml(免责声明:我是该软件包的作者)确实具有 内置此功能,因为有必要支持其功能 往返(加载,修改,转储)YAML数据而不会引入虚假信息 变化。除此之外,它默认为YAML 1.2,而仅PyYAML 支持YAML 1.1(已超过10年前)。

import sys
import ruamel.yaml

data = [{'item': 'Food_eat','Food': {'foodNo': 42536216,'type': 'fruit','moreInfo': ['organic']}}]

yaml = ruamel.yaml.YAML()
yaml.indent(sequence=4,offset=2)
yaml.dump(data,sys.stdout)

给出:

  - item: Food_eat
    Food:
      foodNo: 42536216
      type: fruit
      moreInfo:
        - organic

这取决于现代Python保持字典插入顺序的能力。对于 较旧的版本(例如Python 2.7),您必须显式地创建一个 对象CommentedMap(从ruamel.yaml.comments导入, 给它一个元组列表(按正确的顺序),或分配 键值对按照您希望其转储的顺序进行。

正如您在序列的缩进中看到的,破折号具有偏移量,这是您需要注意的 如果不重写其发射器,将无法使用PyYAML。


在PyYAML中,您不想做print(yaml.safe_dump(data)) 这都是无效的。记忆和时间,请始终使用yaml.safe_dump(data,sys.stdout)

本文链接:https://www.f2er.com/3150555.html

大家都在问