objectif
Superposer plusieurs dictionnaires (ex: args > env > defaults) avec résolution par priorité.
code minimal
from collections import ChainMap
defaults = {"host": "localhost", "port": 8080}
env = {"port": 9090}
args = {"debug": True}
cfg = ChainMap(args, env, defaults)
print(cfg["port"] == 9090 and cfg["host"] == "localhost") # attendu: True
utilisation
from collections import ChainMap
base = {"a": 1}
override = {"a": 2, "b": 3}
merged = ChainMap(override, base)
print(dict(merged.items())["a"] == 2)
variante(s) utile(s)
from collections import ChainMap
cm = ChainMap({"x":1}, {"x":0})
print(cm.maps[0]["x"] == 1)
notes
- ChainMap n’effectue pas de copie; les écritures se font dans le premier mapping.
- Idéal pour appliquer des overrides sans merger coûteux.