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.