在多行上使用内联 Yaml 格式?

Using Inline Yaml Formatting over multiple lines?

我正在尝试创建一个用于 nose-testconfig 的 YAML 文件,数据如下:

"Computers": 
    "Brand: "Dell"
    "Cost": 500
    "IP": "194.66.82.11"

    "Brand: "HP"
    "Cost": 600
    "IP": "194.66.82.13"

    "Brand: "Asus"
    "Cost": 550
    "IP": "194.66.82.15"

我遇到的问题是每个重复的项目都被覆盖了。我需要让它成为字典列表的列表,但是我不知道如何让它工作。我不能只使用带方括号和大括号的内联格式,因为我正在处理的实际数据在每个字典中都有更多数据,所以行会太长。

有没有办法将其格式化为使每个词典列表分开?

我想你想要的是:

Computers:
  - Brand: Dell
    Cost: 500
    IP: 194.66.82.11

  - Brand: HP
    Cost: 600
    IP: 194.66.82.13

  - Brand: Asus
    Cost: 550
    IP: 194.66.82.15

这表示一个映射("dictionary")有一个键,"Computers,"它的值是一个序列("list")有三个项目,每个项目都是一个映射与三个键 "Brand," "Cost" 和 "IP."

在JavaScript中,例如,它会反序列化为这个结构:

{ Computers:
  [ { Brand: "Dell",
      Cost: 500,
      IP: "192.66.82.11"
    },
    { Brand: "HP",
      Cost: 600,
      IP: "192.168.82.13"
    },
    { Brand: "Asus",
      Cost: 550,
      IP: "192.168.82.15"
    }
  ]
}

P.S。您会注意到我删除了引号。引号是 YAML 中的一种反模式——在极少数情况下它们是必需的(例如,如果您希望将“500”反序列化为字符串而不是数字)并且它们会增加很多行噪声,从而破坏YAML 的目的,即易于阅读和编辑。

P.P.S。我发现一个非常有用的实用程序是 Online YAML Parser,它会在您键入任何 YAML 输入时以 JSON 或 Python 符号显示结果。

如果您不确定某个构造的 YAML 应该是什么样子,您应该做的是用您选择的编程语言创建构造(不应该有这样的不确定性),然后转储它。例如。在 Python:

import sys
import ruamel.yaml

data = dict(Computers=[
    dict(Brand="Dell", Cost=500, IP="194.66.82.11"),
    dict(Brand="HP", Cost=600, IP="194.66.82.13"),
    dict(Brand="Asus", Cost=550, IP="194.66.82.15"),
    ])

yaml = YAML()
yaml.dump(data, sys.stdout)

给你:

Computers:
- IP: 194.66.82.11
  Brand: Dell
  Cost: 500
- IP: 194.66.82.13
  Brand: HP
  Cost: 600
- IP: 194.66.82.15
  Brand: Asus
  Cost: 550

您看到的是简单标量周围的引号是不必要的(但根据规范允许使用引号,因此完全可以放入)。您还看到您错过了在 YAML 文件中放置一个列表(在块模式下由 - 虚线项表示)。

使用这种方式,您可以轻松自行确定应如何将数据格式化为有效的 YAML。对于某些解析器,您需要尝试使用块或非流样式格式以获得更好的可读性结果,对于 ruamel.yaml(我是作者)块样式是默认的,IMO,更具可读性。

请注意,根据定义,YAML 中映射的键是无序的,尽管 ruamel.yaml 可以在往返模式下为您保留这些键