[PY3]——合併多個字典或對映(collections模組中的ChainMap 類)

Jelly_lyj發表於2017-03-18

問題

現在有多個字典或者對映,你想將它們從邏輯上合併為一個單一的對映後執行某些操作, 比如查詢值或者檢查某些鍵是否存在。

解決方案

使用 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})

 

相關文章