YAML:钥匙的锚?

YAML:钥匙的锚?,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 mediumCo

我可以在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的特征 我是作者)尤其如此


请注意别名(
*X
)和映射值指示器(
)之间的空格。并非所有YAML解析器(包括
libyaml
,其中
ruamel.YAML
在指定'YAML(typ='safe')时使用的C实现)都能正确解析YAML锚和别名,因此此处需要空格(或换行符)。

您可能想问的是,是否可以将别名用于键。这样的别名也不需要锚定为键,特别是如果您从不使用值0、1和2。例如,它们可以是序列的元素。