あなたを助けるYAMLのメカニズムは、anchors and aliasesを使用しています。 YAMLマッピング(Python dict
としてロード)をエイリアスすると、item1
とitem2
に接続された同じdict
のインスタンスが取得されるため、注意しなければならないものがあります。
これが必要でない場合は、別名の具体的な解釈がmerge keyという形であります。それがキー<<
を指定する使用するには:
item1: &repl
it_one:
some: {...}
it_two:
somemore: {...}
item2:
<<: *repl
これは、少なくとも直接item2
下、item1
(すなわちキーit_one
、it_two
)と同じキー/値を持つ新しい辞書をお渡しします。ただし、これらのキー(some: {}
)の値は、これが内部的にロードされ処理されるため、同じオブジェクトになります。
オブジェクトの再利用のようなものは、あなたがより良いエイリアスの非マージの使用にこだわる、問題がある場合:
item1: &repl
it_one:
some: {...}
it_two:
somemore: {...}
item2: *repl
と新しいdicts(およびリストにKey-Valueを複製する再帰的に木の上を歩きます)。
ruamel.yaml
にround_trip_loader
を使用すると、マージキーを使用している場合でもすべてを共有することに注意してください。ラウンドトリップができない場合は、代わりにsafe_loader
を使用してください。
ありがとう、それは私が探していたものです! – Andreios