本篇文章帶給大家的內容是關於Python將多個映射合併為單一映射的方法與分析(程式碼實例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
1、需求
我們有多個字典或映射,想在邏輯上將它們合併為一個單獨的映射結構,以此執行一些特定的操作,例如尋找數值或檢查鍵是否存在。
2、解決方案
假設有兩個字典:
a={'x':1,'z':3} b={'y':2,'z':4}
現在假設想要執行查找操作,我們必須檢查這兩個字典(例如,先在a中查找,如果沒做找到在去b中查找)。一個簡單的方法是利用collections模組中的ChainMap類別來解決這個問題。例如:
from collections import ChainMap a={'x':1,'z':3} b={'y':2,'z':4} c=ChainMap(a,b) print(c['x']) print(c['y']) print(c['z']) print(len(c)) print(list(c.keys())) print(list(c.values())) a['z']=5 print(c['z'])
運行結果:
1 2 3 3 ['y', 'z', 'x'] [2, 3, 1] 5
3、分析
ChainMap可接受多個映射然後在邏輯上事它們表現為一個單獨的映射機構。但是,這些映射運行時並不會合併在一起。相反,ChainMap只是簡單地維護一個記錄底層映射關係的列表,然後重定義常見的字典操作來掃描這個列表。大部分的列表操作都能正常運作。例如:len、keys()、values()。
如果有重複的鍵,那麼會採用第一個映射中所對應的值。
修改映射的操作總是會作用在列出的第一個映射結構上。例如:
del c['x'] #可以正常删除a中的'x':1 del c['y'] #会移除,因为第一个映射结构a中没有y键
作為ChainMap的替代方案,我們可能會考慮利用字典的update()方法將多個字典合併在一起,例如:
from collections import ChainMap a={'x':1,'z':3} b={'y':2,'z':4} #为了防止b被直接修改,先cope一份b c=dict(b) print(id(c)) print(id(b)) c.update(a) print(c['x']) print(c['y']) print(c['z'])
運行結果:
4550769400 4549694808 1 2 3
這麼做行得通,但這需要單獨建構一個完整的字典物件(或直接修改其中一個,但會破壞原始資料)。此外,如果其中任何一個原始字典做了修改,這個改變都不會反應到合併後的字典中,但是ChainMap就可以。
#以上是Python將多個映射合併為單一映射的方法與分析(程式碼實例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!