<p>实现这一点的一种方法是创建一个包含适当
有关合并信息的信息,并且仍然允许查找
<code>data['bar']['key1']</code>。当然,您需要使用适当的representer正确地转储这个类。你知道吗</p>
<p>这是什么鲁阿迈尔.亚马尔(免责声明我是
该包的作者)不允许合并地图的往返:</p>
<pre><code>import sys
import ruamel.yaml
yaml_str = """\
foo: &foo_anchor
key1: v1
key2: v2
key3: v3
bar:
<<: *foo_anchor
key2: override_value
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
yaml.dump(data, sys.stdout)
</code></pre>
<p>它给出:</p>
<pre><code>foo: &foo_anchor
key1: v1
key2: v2
key3: v3
bar:
<<: *foo_anchor
key2: override_value
</code></pre>
<p>所以我建议你看一下类<code>CommentedMap</code>,以及它是怎样的
在<code>constructor.py</code>和<code>representer.py</code>中处理。你知道吗</p>
<p>如果可以升级到<code>ruamel.yaml</code>,则可以执行以下操作:</p>
<pre><code>cm = ruamel.yaml.comments.CommentedMap
data = cm()
data['foo'] = foo = cm(key1='v1', key2='v2', key3='v3')
foo.yaml_set_anchor('foo_anchor')
data['bar'] = bar = cm(key2='override_value')
bar.add_yaml_merge([(0, foo)])
yaml = ruamel.yaml.YAML()
yaml.dump(data, sys.stdout)
</code></pre>
<p>从零开始,你会得到一些类似的东西:</p>
<pre><code>foo: &foo_anchor
key1: v1
key2: v2
key3: v3
bar:
<<: *foo_anchor
key2: override_value
</code></pre>
<p>当然,以下工作与预期一样:</p>
<pre><code>print(list(data['bar'].keys()))
print(data['bar']['key3'])
</code></pre>
<p>给予:</p>
<pre><code>['key2', 'key1', 'key3']
v3
</code></pre>