yaml - YAML:键的锚点?
问题描述
我可以在 YAML 中重复使用密钥而不重新键入它们吗?如果可以通过锚重复密钥,重命名此密钥将很简单。
splitTestVariants:
lowCost: 0
mediumCost: 1
highCost: 2
pricePlans:
# reuse lowCost key instead this comment without retyping it
basic: 100
premium: 200
vip: 300
# reuse mediumCost key instead this comment without retyping it
basic: 200
premium: 300
vip: 400
# reuse highCost instead this comment without retyping it
basic: 300
premium: 400
vip: 500
解决方案
当然可以使用锚和别名来减少打字:
import sys
import ruamel.yaml
yaml_str = """\
splitTestVariants:
&l lowCost: 0
&m mediumCost: 1
&h highCost: 2
pricePlans:
*l :
basic: 100
premium: 200
vip: 300
*m :
basic: 200
premium: 300
vip: 400
*h :
basic: 300
premium: 400
vip: 500
"""
yaml = ruamel.yaml.YAML()
yaml.default_flow_style = False
data = yaml.load(yaml_str)
print(list(data['pricePlans'].keys()))
这使:
['lowCost', 'mediumCost', 'highCost']
以上是 YAML 的一个特性,而不是ruamel.yaml
(我是作者)的一个特性。
请注意别名 ( *X
) 和映射值指示符 ( :
) 之间的空格。并非所有 YAML 解析器(包括指定 `YAML(typ='safe')' 时libyaml
使用的 C 实现)都能正确解析 YAML 锚和别名,冒号可以是锚名称的一部分,因此空格(或换行符)是这里需要。ruamel.yaml
推荐阅读
- android-camera - 是否可以在 NOX 或 Blustack 上使用 OBS 虚拟相机?
- amazon-web-services - 我无法在 aws cli 上执行“cat credentials”
- java - 单击时单选按钮不会更改
- linux - 如何修改PTE指向另一个物理地址(只修改PTE中的物理页帧号PFN)
- twitch - Twitchemotes 找不到使用 api 的频道,但在浏览器中可以
- sql - 什么时候应该在外键上设置 NULL 而不是 CASCADE?
- java - vscode设置tomcat 9运行时
- flutter - 关于构建颤振(-bloc)应用程序的问题
- docker - RPI:Ansible:没有可用于 docker-ce 的软件包
- c - (数据结构:链表)将奇数项移到列表的后面