最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python ChainMap的使用和說明詳解

 更新時間:2019年06月11日 09:53:21   作者:茫茫碧落  
這篇文章主要介紹了python ChainMap的使用和說明詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

問題的背景是我們有多個字典或者映射,想把它們合并成為一個單獨的映射,有人說可以用update進(jìn)行合并,這樣做的問題就是新建了一個數(shù)據(jù)結(jié)構(gòu)以致于當(dāng)我們對原來的字典進(jìn)行更改的時候不會同步。如果想建立一個同步的查詢方法,可以使用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最基本的使用,可以用來合并兩個或者更多個字典,當(dāng)查詢的時候,從前往后依次查詢。

有一個注意點就是當(dāng)對ChainMap進(jìn)行修改的時候總是只會對第一個字典進(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和帶有作用域的值,諸如全局變量,局部變量之間工作的時候特別有效,

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)
<ipython-input-19-dc4debb7ca3b> in <module>()
----> 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實際上是把放入的字典存儲在一個隊列中,當(dāng)進(jìn)行字典的增加刪除等操作只會在第一個字典上進(jìn)行,當(dāng)進(jìn)行查找的時候會依次查找,new_child()方法實質(zhì)上是在列表的第一個元素前放入一個字典,默認(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({})

也正是因為底層是列表實現(xiàn)的,所以實際上ChainMap查詢的字典實際上還是原來的字典的引用

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

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

相關(guān)文章

  • 深入了解Django View(視圖系統(tǒng))

    深入了解Django View(視圖系統(tǒng))

    這篇文章主要介紹了簡單了解Django View(視圖系統(tǒng)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 使用pygame寫一個古詩詞填空通關(guān)游戲

    使用pygame寫一個古詩詞填空通關(guān)游戲

    這篇文章主要介紹了使用pygame寫一個古詩詞填空通關(guān)游戲,之前寫的詩詞填空的游戲支持python2,現(xiàn)在對程序進(jìn)行了修改,兼容支持python2和python3,需要的朋友可以參考下
    2019-12-12
  • 使用Python實現(xiàn)屏幕截圖功能的詳細(xì)教程

    使用Python實現(xiàn)屏幕截圖功能的詳細(xì)教程

    Python使用ImageGrab截圖主要依賴于Pillow庫(PIL庫的一個分支),該庫提供了ImageGrab模塊來實現(xiàn)屏幕截圖功能,以下是一個詳細(xì)的截圖教程,需要的朋友可以參考下
    2025-01-01
  • python自動化之re模塊詳解

    python自動化之re模塊詳解

    這篇文章主要為大家介紹了python自動化之re模塊,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python實現(xiàn)批量修改圖片大小

    Python實現(xiàn)批量修改圖片大小

    在日常生活中經(jīng)常有需要調(diào)整圖片大小的需求,一張兩張的還好,但是如果需要幾十張幾百張甚至幾千張,就可以考慮使用Python腳本來執(zhí)行了,下面小編就來和大家分享幾個Python可以批量修改圖片大小的腳本吧
    2023-07-07
  • python?NetworkX庫生成并繪制帶權(quán)無向圖

    python?NetworkX庫生成并繪制帶權(quán)無向圖

    這篇文章主要為大家介紹了python?NetworkX庫生成并繪制帶權(quán)無向圖的實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • pycharm遠(yuǎn)程連接vagrant虛擬機中mariadb數(shù)據(jù)庫

    pycharm遠(yuǎn)程連接vagrant虛擬機中mariadb數(shù)據(jù)庫

    這篇文章主要介紹了pycharm遠(yuǎn)程連接vagrant虛擬機中mariadb數(shù)據(jù)庫,需要的朋友可以參考下
    2020-06-06
  • Python中的collections集合與typing數(shù)據(jù)類型模塊

    Python中的collections集合與typing數(shù)據(jù)類型模塊

    這篇文章介紹了Python中的collections集合與typing數(shù)據(jù)類型模塊,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • Django Rest Framework框架構(gòu)建復(fù)雜API技能詳解

    Django Rest Framework框架構(gòu)建復(fù)雜API技能詳解

    這篇文章會詳細(xì)介紹Django REST Framework的核心組成部分,包括Serializers、ViewSets、Routers、權(quán)限和認(rèn)證系統(tǒng)以及測試和調(diào)試工具,文章從基礎(chǔ)開始,逐步深入,旨在幫助讀者掌握使用Django REST Framework構(gòu)建復(fù)雜API的技能
    2023-09-09
  • Python相互導(dǎo)入的問題解決

    Python相互導(dǎo)入的問題解決

    大家好,本篇文章主要講的是Python相互導(dǎo)入的問題解決,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01

最新評論

盈江县| 于都县| 厦门市| 门头沟区| 新平| 屏东市| 兴安盟| 三亚市| 东光县| 绍兴市| 鹤壁市| 金川县| 朝阳县| 康马县| 新沂市| 蚌埠市| 利辛县| 宜春市| 盐源县| 云浮市| 蕲春县| 岳池县| 娱乐| 那曲县| 黎平县| 曲沃县| 丰县| 十堰市| 武强县| 雅安市| 沙田区| 丰顺县| 潼关县| 镇安县| 兴国县| 浏阳市| 遵化市| 临朐县| 蓬溪县| 遂溪县| 红原县|