collections.ChainMap

ChainMap3.3 版本中的新功能 ****

給出一些 maps 返回一個新的 ChainMap 物件。此物件將多個 dicts 或其他對映組合在一起以建立單個可更新檢視。

ChainMaps 可用於管理巢狀上下文和疊加層。在 Django 模板引擎中的 Context 類的實現中可以找到 python 世界中的一個例子。它可用於快速連結多個對映,以便將結果視為一個單元。它通常比建立新詞典和執行多個 update() 呼叫快得多。

只要有一個查詢值鏈,就可以有 ChainMap 的情況。示例包括同時具有使用者指定的值和預設值的字典。另一個例子是在 web 使用中發現的 POSTGET 引數對映,例如 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