ChainMap agrupa varios mappings en una vista dinámica. La búsqueda avanza de izquierda a derecha, por lo que los argumentos de CLI pueden sobrescribir el entorno y los valores predeterminados sin crear otro diccionario.
from collections import ChainMap
defaults = {"theme": "light", "timeout": 30}
environment = {"timeout": 10}
cli = {"theme": "dark"}
config = ChainMap(cli, environment, defaults)
print(config["theme"], config["timeout"])
config["debug"] = True # writes to cli, the first mapping
Cómo usarlo con seguridad
Las escrituras y eliminaciones afectan solo al primer mapping. Si necesitas una copia independiente, fusiona los diccionarios explícitamente. Usa new_child() para abrir un ámbito temporal y parents para recuperar la cadena anterior.
Para reforzar la base, consulta guía de collections en Python y guía de type hints.
La documentación oficial de Python, consultada el 22 de julio de 2026, describe la API, los casos límite y la compatibilidad entre versiones.