擅长:python、mysql、java
<p>你可以这样做:</p>
<pre><code>import yaml
class Merger(object):
pass
def merger_representer(dumper, data):
return dumper.represent_scalar(u'tag:yaml.org,2002:merge', '<<')
yaml.add_representer(Merger, merger_representer)
foo = {'key1': 'v1', 'key2': 'v2', 'key3': 'v3'}
root = {
'foo': foo,
'bar': {
Merger(): foo,
'key2': 'override_value'
}
}
print(yaml.dump(root, sort_keys=False))
</code></pre>
<p>输出为:</p>
<pre><code>foo: &id001
key1: v1
key2: v2
key3: v3
bar:
<<: *id001
key2: override_value
</code></pre>
<p><code>sort_keys=False</code>确保键的顺序正确,它需要Python>;=3.7和PyYAML>;=5.1(谢谢@tinita)。您无法控制生成的锚名称,但是这个YAML与您的相当。你知道吗</p>
<p>您需要<code>Merger</code>类来强制PyYAML发出<code><<</code>(对于普通的字符串键,它将发出<code>'<<'</code>,这样它就不会与合并键混淆)。你知道吗</p>