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