Der Mechanismus in YAML, der Ihnen helfen könnte, verwendet anchors and aliases. Bei denen muss man allerdings aufpassen, denn beim Alias eines YAML-Mappings (geladen als Python dict
) erhält man die gleiche Instanz des dict
an item1
und item2
angehängt.
Wenn das nicht das ist, was Sie wollen, gibt es eine spezifische Interpretation eines Alias in Form einer merge key. So verwenden Sie festlegen, dass ein Schlüssel <<
:
item1: &repl
it_one:
some: {...}
it_two:
somemore: {...}
item2:
<<: *repl
das Sie geben, zumindest unmittelbar unter item2
einen neuen dict mit den gleichen Schlüssel/Werte wie für item1
(d Tasten it_one
, it_two
). Jedoch sind die Werte für diese Schlüssel (some: {}
) aufgrund der Art und Weise, wie diese intern geladen und behandelt werden, dasselbe Objekt.
Wenn diese Art von Objekt Wiederverwendung problematisch ist, sollten Sie besser Stick mit einer nicht-merge Verwendung des Alias:
item1: &repl
it_one:
some: {...}
it_two:
somemore: {...}
item2: *repl
und zu Fuß über den Baum rekursiv die Schlüsselwerte in neuen dicts (und Listen duplizieren).
Bitte beachten Sie, dass, wenn Sie die round_trip_loader
in ruamel.yaml
verwenden, Sie sogar alles teilen, auch wenn Sie Merge-Schlüssel verwenden. Ohne dass eine Rundauslösung nicht möglich wäre, verwenden Sie stattdessen die safe_loader
.
Vielen Dank, es ist genau das, was ich gesucht habe! – Andreios