collections.ChainMap
ChainMap
是 3.3 版本中的新功能 ****
给出一些 maps
返回一个新的 ChainMap
对象。此对象将多个 dicts 或其他映射组合在一起以创建单个可更新视图。
ChainMap
s 可用于管理嵌套上下文和叠加层。在 Django 模板引擎中的 Context
类的实现中可以找到 python 世界中的一个例子。它可用于快速链接多个映射,以便将结果视为一个单元。它通常比创建新词典和运行多个 update()
调用快得多。
只要有一个查找值链,就可以有 ChainMap
的情况。示例包括同时具有用户指定的值和默认值的字典。另一个例子是在 web 使用中发现的 POST
和 GET
参数映射,例如 Django 或 Flask。通过使用 ChainMap
,可以返回两个不同字典的组合视图。
maps
参数列表从第一次搜索到最后搜索排序。查找会连续搜索基础映射,直到找到密钥。相反,写入,更新和删除仅对第一个映射进行操作。
import collections
# define two dictionaries with at least some keys overlapping.
dict1 = {'apple': 1, 'banana': 2}
dict2 = {'coconut': 1, 'date': 1, 'apple': 3}
# create two ChainMaps with different ordering of those dicts.
combined_dict = collections.ChainMap(dict1, dict2)
reverse_ordered_dict = collections.ChainMap(dict2, dict1)
请注意在后续查找中首先找到值的顺序的影响
for k, v in combined_dict.items():
print(k, v)
date 1
apple 1
banana 2
coconut 1
for k, v in reverse_ordered_dict.items():
print(k, v)
date 1
apple 3
banana 2
coconut 1