通过 PyYAML 创建带有别名的 yaml 文件

Eag*_*rn 4 python alias yaml cross-reference pyyaml

我需要创建一个具有以下格式的 yaml 文件:

imager: &imager
  type: "detector"
  half_angle: 75 degrees
  max_distance: 23000 meters
ownship: &ownship
  origin: [11,11,5]
  type: "uav"

vehicles:
  - <<: *ownship
  name: "uav1"
  origin: [35.69257148103399 degrees, -117.689417544709 degrees, 5500]
  sensors:
    - <<: *imager
      name: "imager1"
Run Code Online (Sandbox Code Playgroud)

我将所有特定数据存储在 Python 类中,因此我想使用 PyYAML 来使事情变得简单。然而,当我去阅读文档时,我没有看到如何使用 PyYAML 处理别名。这个功能是否存在,或者我应该继续制作我自己的 yaml writer?

lar*_*sks 5

如果您的 python 数据结构包含对同一对象的多个引用,那么 PyYAML 看起来似乎做了正确的事情。例如,考虑一下:

>>> a = {'name': 'bob', 'office': '100'}
>>> b = {'president': a, 'vice-president': a}
>>> b
{'president': {'name': 'bob', 'office': '100'}, 'vice-president': {'name': 'bob', 'office': '100'}}
>>> import yaml
>>> print yaml.dump(b)
president: &id001 {name: bob, office: '100'}
vice-president: *id001
Run Code Online (Sandbox Code Playgroud)

PyYAML 已识别出“president”和“vice-president”键的值是对同一对象的引用,并创建了一个别名并正确使用它。