Python Glossary English

Python 3.3+collectionsпонятие

collections.ChainMap

chainmap

Объединяет несколько словарей в один вид. Поиск идёт по порядку. maps — список словарей, new_child() — новый дочерний уровень, parents — все кроме первого.

Синтаксис

collections.ChainMap(*maps)
.new_child(m=None)
.parents

ChainMap не копирует словари, а держит ссылки на них: изменение исходного словаря сразу видно через цепочку — это принципиальное отличие от снимка {**defaults, **overrides}. Главная ловушка — асимметрия чтения и записи: ключ ищется по всем словарям, но присваивание, pop и del работают только с первым, поэтому удаление ключа, который виден при чтении, но лежит в defaults, падает с KeyError.

Примеры

from collections import ChainMap
defaults = {'color': 'red', 'size': 10}
user = {'color': 'blue'}
chain = ChainMap(user, defaults)
print(chain['color'])  # → blue  (из user)
print(chain['size'])  # → 10  (из defaults)
print(chain.maps)  # → [{'color': 'blue'}, {'color': 'red', 'size': 10}]
child = chain.new_child({'size': 20})
print(child['size'])  # → 20

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности