現在有多個字典或者對映,你想將它們從邏輯上合併為乙個單一的對映後執行某些操作, 比如查詢值或者檢查某些鍵是否存在。
使用collections
庫的chainmap
類,可以快速的將多個dict
合併在一起
>>>
from collections import chainmap
>>> a =
>>> b =
>>> c = chainmap(a, b)
>>> print(c['x'])
1>>> print(c['y'])
2>>> print(c['z'])
3
chainmap
可以將多個dict
合併在一起,當做乙個整體來處理,並且它比建立乙個新的dict
或者使用dict.update()
速度要快
chainmap
的底層實現是將合併的字典存到乙個list
當中,這個list
我們可以通過訪問maps
成員得到
>>>
from collections import chainmap
>>> a =
>>> b =
>>> c = chainmap(a, b)
>>> print(c.maps)
[, ]
對於查詢操作,chainmap
會掃瞄這個list
,直到找到key存在然後返回,所以上面的例子,我們的c['z']
得到的是3
而對於增加和刪除操作,chainmap
只會操作list
中的第乙個dict
另外一點需要注意的是,chainmap
是按引用儲存的,意思是如果我們修改了原來的dict
,這個修改是會被反射到chainmap
裡,舉個例子:
>>>
from collections import chainmap
>>> a =
>>> b =
>>> c = chainmap(a, b)
>>> print(c['x'])
1>>> a['x'] = 66
>>> print(c['x'])
關於chainmap
更詳細的介紹可以參考:
python cookbook
Python每日一練0013
現在有多個字典或者對映,你想將它們從邏輯上合併為乙個單一的對映後執行某些操作,比如查詢值或者檢查某些鍵是否存在。使用collections庫的chainmap類,可以快速的將多個dict合併在一起 from collections import chainmap a b c chainmap a,b...
python每日一練
人生苦短,我用python 2018.6.5 有個目錄,裡面是你自己寫過的程式,統計一下你寫過多少行 包括空行和注釋,但是要分別列出來 coding utf 8 import re import glob defcodecolletion path filelist glob.glob path p...
Python每日一練
人生苦短,我用python 2018.6.13 最近事情有點多,有幾天沒寫了,正好最近需要統計一下各組排名,也就拿python代替手工了 各組給出其他組的排名,統計每個組最終的得分,第一名為0.5,第二名0.4,以此類推。coding utf 8 groups 3,2,5,4,6 1,3,5,6,4...