欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python ChainMap的使用和說明詳解

系統(tǒng) 1993 0

ChainMap是Python collections模塊中的一個(gè)成員,它用來將多個(gè)map組合到一起。Chain是鏈條的意思,字面意思就是把map串聯(lián)到一起。

問題的背景是我們有多個(gè)字典或者映射,想把它們合并成為一個(gè)單獨(dú)的映射,有人說可以用update進(jìn)行合并,這樣做的問題就是新建了一個(gè)數(shù)據(jù)結(jié)構(gòu)以致于當(dāng)我們對(duì)原來的字典進(jìn)行更改的時(shí)候不會(huì)同步。如果想建立一個(gè)同步的查詢方法,可以使用ChainMap

先看一下初步使用

            
from collections import ChainMap
a = {"x":1, "z":3}
b = {"y":2, "z":4}
c = ChainMap(a,b)
print(c)
print("x: {}, y: {}, z: {}".format(c["x"], c["y"], c["z"]))


          

輸出:

ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4})
x: 1, y: 2, z: 3
[Finished in 0.1s]

這是ChainMap最基本的使用,可以用來合并兩個(gè)或者更多個(gè)字典,當(dāng)查詢的時(shí)候,從前往后依次查詢。

有一個(gè)注意點(diǎn)就是當(dāng)對(duì)ChainMap進(jìn)行修改的時(shí)候總是只會(huì)對(duì)第一個(gè)字典進(jìn)行修改

            
In [6]: a = {"x":1, "z":3}

In [7]: b = {"y":2, "z":4}

In [8]: c = ChainMap(a, b)

In [9]: c
Out[9]: ChainMap({'z': 3, 'x': 1}, {'z': 4, 'y': 2})

In [10]: c["z"]
Out[10]: 3

In [11]: c["z"] = 4

In [12]: c
Out[12]: ChainMap({'z': 4, 'x': 1}, {'z': 4, 'y': 2})

In [13]: c.pop('z')
Out[13]: 4

In [14]: c
Out[14]: ChainMap({'x': 1}, {'z': 4, 'y': 2})

In [15]: del c["y"]
---------------------------------------------------------------------------
KeyError                 Traceback (most recent call last)
。。。。。。
KeyError: "Key not found in the first mapping: 'y'"
          

ChainMap和帶有作用域的值,諸如全局變量,局部變量之間工作的時(shí)候特別有效,

            
In [4]: a = ChainMap()

In [5]: a["x"]=1

In [6]: a
Out[6]: ChainMap({'x': 1})

In [7]: b = a.new_child()

In [8]: b
Out[8]: ChainMap({}, {'x': 1})

In [9]: b["x"] = 2

In [10]: b
Out[10]: ChainMap({'x': 2}, {'x': 1})

In [11]: b["y"] = 3

In [12]: b
Out[12]: ChainMap({'x': 2, 'y': 3}, {'x': 1})

In [13]: a
Out[13]: ChainMap({'x': 1})

In [14]: c = a.new_child()

In [15]: c
Out[15]: ChainMap({}, {'x': 1})

In [16]: c["x"]
Out[16]: 1

In [17]: c["y"] = 1

In [18]: c
Out[18]: ChainMap({'y': 1}, {'x': 1})

In [19]: d = c.parents()
---------------------------------------------------------------------------
TypeError                 Traceback (most recent call last)

            
               in 
              
                ()
----> 1 d = c.parents()

TypeError: 'ChainMap' object is not callable

In [20]: d = c.parents

In [21]: d
Out[21]: ChainMap({'x': 1})

In [22]: d is a
Out[22]: False

In [23]: d == a
Out[23]: True


              
            
          

從原理上面講,ChainMap實(shí)際上是把放入的字典存儲(chǔ)在一個(gè)隊(duì)列中,當(dāng)進(jìn)行字典的增加刪除等操作只會(huì)在第一個(gè)字典上進(jìn)行,當(dāng)進(jìn)行查找的時(shí)候會(huì)依次查找,new_child()方法實(shí)質(zhì)上是在列表的第一個(gè)元素前放入一個(gè)字典,默認(rèn)是{},而parents是去掉了列表開頭的元素

            
In [24]: a = {"x":1, "z":3}

In [25]: b = {"y":2, "z":4}

In [26]: c = ChainMap(a,b)

In [27]: c
Out[27]: ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4})

In [28]: c.maps
Out[28]: [{'x': 1, 'z': 3}, {'y': 2, 'z': 4}]

In [29]: c.parents
Out[29]: ChainMap({'y': 2, 'z': 4})

In [30]: c.parents.maps
Out[30]: [{'y': 2, 'z': 4}]

In [31]: c.parents.parents
Out[31]: ChainMap({})

In [32]: c.parents.parents.parents
Out[32]: ChainMap({})
          

也正是因?yàn)榈讓邮橇斜韺?shí)現(xiàn)的,所以實(shí)際上ChainMap查詢的字典實(shí)際上還是原來的字典的引用

ChainMap文檔和示例:https://docs.python.org/3/library/collections.html#collections.ChainMap

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日日干夜夜操s8 | 三级高清 | 瑟瑟网站免费网站入口 | 日本hdxxxxx护士免费的 | 成人做爽爽爽爽免费国产软件 | 青娱乐欧美视频 | 国产成人av在线 | 激情一区二区三区成人 | 色多多成视频人在线观看 | 看免费的毛片 | 午夜性刺激在线观看视频 | 奇米网色 | 国产区在线 | 免费看的黄色 | 91探花视频在线观看 | 久久国产资源 | 秋霞影院精品久久久久 | 一区二区免费在线 | 免费观看国产大片资源视频 | 久久久中文字幕 | 日韩视频中文字幕 | 久草8| 三级黄色片在线免费观看 | 久久久久国产精品免费免费搜索 | 日韩精品一区二区三区中文字幕 | 久9久9精品视频在线观看 | 99视频这里有精品 | 在线播放国产一区二区三区 | 久久国产高清 | 国产精品福利短视在线播放频 | 天天天操 | 久久精品99| 日本三级黄色片网站 | 青青草娱乐在线 | 欧美高清另类自拍视频在线看 | 国产成人系列 | 精品一区久久 | 午夜性色一区二区三区不卡视频 | 亚洲精品免费在线观看 | 亚洲第一在线 | 国产日韩一区二区 |