首頁  >  文章  >  後端開發  >  Python將多個映射合併為單一映射的方法與分析(程式碼實例)

Python將多個映射合併為單一映射的方法與分析(程式碼實例)

不言
不言轉載
2018-11-26 16:39:492107瀏覽

本篇文章帶給大家的內容是關於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中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除