問題
現在有多個字典或者對映,你想將它們從邏輯上合併為一個單一的對映後執行某些操作, 比如查詢值或者檢查某些鍵是否存在。
解決方案
使用 collections
模組中的 ChainMap
類
ChainMap類
1. 一個 ChainMap
接受多個字典並將它們在邏輯上變為一個字典。 然後,這些字典並不是真的合併在一起了, ChainMap
類只是在內部建立了一個容納這些字典的列表 並重新定義了一些常見的字典操作來遍歷這個列表。大部分字典操作都是可以正常使用的。
a={'x':1,'z':3} b={'y':2,'z':6} from collections import ChainMap c=ChainMap(a,b) print(c) ChainMap({'x': 1, 'z': 3}, {'z': 6, 'y': 2}) print(len(c)) 3 print(list(c.keys())) ['x', 'z', 'y'] print(list(c.values())) [1, 3, 2] print(c['z']) 3
2. 如果出現重複鍵,那麼第一次出現的對映值會被返回。對於字典的更新或刪除操作也總是影響的是列表中第一個字典。
3. 更新ChainMap字典和更新原字典,他們彼此都會隨之更新。
c['z']=30 print(a);print(b) {'x': 1, 'z': 30} {'z': 6, 'y': 2} a['x']=100 print(c) ChainMap({'x': 100, 'z': 30}, {'z': 6, 'y': 2})