带有 yaml 文件的 Dicts 变成 OrderedDicts

Dicts become OrderedDicts with yaml files

我正在尝试将某些内容写入 .yaml 文件,但对 documentation 感到困惑。那里说了以下内容:

Block mapping can be nested:

# YAML
hero:
  hp: 34
  sp: 8
  level: 4
orc:
  hp: 12
  sp: 0
  level: 2

# Python
{'hero': {'hp': 34, 'sp': 8, 'level': 4}, 'orc': {'hp': 12, 'sp': 0, 'level': 2}}

所以我试图通过最终如下所示的 yaml 文件获得类似的结果:

User1:
  name: 'name1'
  id: 001
  strikes: 1
User2:
  name: 'name2'
  id: 002
  strikes: 3

当我尝试使用文档示例中使用的内容时,结果如下:

User1: {id: '001', name: name1, strikes: 1}
User2: {id: '002', name: name2, strikes: 3}

为此,我使用了以下代码:

strikes = {'User1': {'name': 'name1', 'id': '001', 'strikes': 1}, 'User2': {'name': 'name2', 'id': '002', 'strikes': 3}}

with open(path + "/strikes.yml", 'w+') as stream:
    yaml.dump(strikes, stream)

PyYAML 默认情况下,确实以流式写出复合叶节点,其余以块式写出。

如果您不希望那样,即希望一切都是块式的,请使用 safe_dump(data, default_flow_style=False):

import sys
import yaml


strikes = {'User1': {'name': 'name1', 'id': '001', 'strikes': 1}, 'User2': {'name': 'name2', 'id': '002', 'strikes': 3}}

yaml.safe_dump(strikes, sys.stdout, default_flow_style=False)

给出:

User1:
  id: '001'
  name: name1
  strikes: 1
User2:
  id: '002'
  name: name2
  strikes: 3

没有理由使用 yaml.dump() 而不是 yaml.safe_dump()(我绝对希望你没有使用 yaml.load() 而不是 yaml.safe_load()