使用解析映射的 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)