如何添加对加载 yaml 的字典的新引用?
How to add new references to a yaml-loaded dict?
我正在加载一个 yaml 字典,并想在再次写出之前使用一些现有的锚点来扩展字典。这可能吗?
例如,假设我有一个 yaml 文件:
a: &a 1
b: &b 2
使用 ruamel,我将如何添加引用 a 的新值 c。也就是说,我要怎么写:
a: &a 1
b: &b 2
c: *a
锚定标量 1
作为 ScalarInt
而不是整数加载到 ruamel.yaml 中,如
integer 没有地方可以附加实际的锚点名称,更重要的是因为倾销
相同的整数不会导致锚定标量和别名。但是当同一个 ScalarInt
实例
被丢弃,您将获得第一个锚点和所有其他事件的别名。
(如果您只需要使用加载的数据,ScalarInt
将像普通整数一样用于所有常见用途。)
要获得所需的输出,您需要使与键 c
关联的值相同
作为 a
的值。你可以简单地通过分配来做到这一点:
import sys
import ruamel.yaml
yaml_str = """\
a: &a 1
b: &b 2
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
data['c'] = data['a']
yaml.dump(data, sys.stdout)
给出:
a: &a 1
b: &b 2
c: *a
如果您想从 Python 代码开始,而不是加载一些带有锚点的 YAML,
您需要自己创建 ScalarInt
:
import sys
import ruamel.yaml
yaml = ruamel.yaml.YAML()
a_val = ruamel.yaml.scalarint.ScalarInt(1, anchor='a')
data = dict(a=a_val, b=ruamel.yaml.scalarint.ScalarInt(2, anchor='b'), c=a_val)
yaml.dump(data, sys.stdout)
这也给出了:
a: &a 1
b: &b 2
c: *a
我正在加载一个 yaml 字典,并想在再次写出之前使用一些现有的锚点来扩展字典。这可能吗?
例如,假设我有一个 yaml 文件:
a: &a 1
b: &b 2
使用 ruamel,我将如何添加引用 a 的新值 c。也就是说,我要怎么写:
a: &a 1
b: &b 2
c: *a
锚定标量 1
作为 ScalarInt
而不是整数加载到 ruamel.yaml 中,如
integer 没有地方可以附加实际的锚点名称,更重要的是因为倾销
相同的整数不会导致锚定标量和别名。但是当同一个 ScalarInt
实例
被丢弃,您将获得第一个锚点和所有其他事件的别名。
(如果您只需要使用加载的数据,ScalarInt
将像普通整数一样用于所有常见用途。)
要获得所需的输出,您需要使与键 c
关联的值相同
作为 a
的值。你可以简单地通过分配来做到这一点:
import sys
import ruamel.yaml
yaml_str = """\
a: &a 1
b: &b 2
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
data['c'] = data['a']
yaml.dump(data, sys.stdout)
给出:
a: &a 1
b: &b 2
c: *a
如果您想从 Python 代码开始,而不是加载一些带有锚点的 YAML,
您需要自己创建 ScalarInt
:
import sys
import ruamel.yaml
yaml = ruamel.yaml.YAML()
a_val = ruamel.yaml.scalarint.ScalarInt(1, anchor='a')
data = dict(a=a_val, b=ruamel.yaml.scalarint.ScalarInt(2, anchor='b'), c=a_val)
yaml.dump(data, sys.stdout)
这也给出了:
a: &a 1
b: &b 2
c: *a