使用解析映射的 YAML 对象

当带有映射的 YAML 文档被解析时,它不会被解析为 dict,而是被解析为 YAML 对象,它的行为非常类似于 dict,但有一些额外的功能。

你可以使用 .items()、.keys()、.values()、使用方括号表示法查找项目、.get(key, with_default_if_nonexistent) 和使用“x in y”表示法来确定键的成员资格。

要检索等效的 dict(只包含其他 dict、列表和字符串/整数/等等),请使用 .data。

示例 yaml_snippet

a: 1
b: 2
c: 3
from strictyaml import Map, Int, load
from ensure import Ensure

schema = Map({"a": Int(), "b": Int(), "c": Int()})

.is_mapping()

Ensure(load(yaml_snippet, schema).is_mapping()).is_true()

与等效的普通 dict 等效

Ensure(load(yaml_snippet, schema)).equals({"a": 1, "b": 2, "c": 3})

.items()

Ensure(load(yaml_snippet, schema).items()).equals([("a", 1), ("b", 2), ("c", 3)])

使用 in 检测键的存在

Ensure("a" in load(yaml_snippet, schema)).is_true()

.values()

Ensure(load(yaml_snippet, schema).values()).equals([1, 2, 3])

.keys()

Ensure(load(yaml_snippet, schema).keys()).equals(["a", "b", "c"])

键查找

yaml = load(yaml_snippet, schema)
Ensure(yaml[yaml.keys()[0]]).equals(1)

字典查找

Ensure(load(yaml_snippet, schema)["a"]).equals(1)

.get()

Ensure(load(yaml_snippet, schema).get("a")).equals(1)

.get() 不存在

Ensure(load(yaml_snippet, schema).get("nonexistent")).equals(None)

len()

Ensure(len(load(yaml_snippet, schema))).equals(3)

可执行规范

mapping-representation.story storytests 自动生成的文档。