python?ChainMap的使用詳解
鏈接字典
chainMap是邏輯上合并兩個(gè)字典為一個(gè)邏輯單元,合并后的結(jié)構(gòu)實(shí)際上是一個(gè)列表,只是邏輯上是仍然為一個(gè)字典(并未生成新的),對(duì)此列表的操作模擬了各種字典的操作。合并后的取值及操作仍然是對(duì)原始字典的操作。
相同的key值合并后取第一個(gè)字典里的值作為重復(fù)key的值,
from collections import ChainMap dict1={"x":1,"y":3,"t":12} dict2={"x":5,"z":3} chain_dict=ChainMap(dict1,dict2) #相同的key值合并后取第一個(gè)dict里的值作為重復(fù)key的值 print(chain_dict["x"]) print(chain_dict["z"])
結(jié)果:
1
3
對(duì)chain_dict的增刪改查影響的都是第一個(gè)字典
from collections import ChainMap dict1={"x":1,"y":3,"t":12} dict2={"x":5,"z":3} chain_dict=ChainMap(dict1,dict2) #對(duì)chain_dict的增刪改查影響的都是dict1 chain_dict["a"]=10 print(dict1) chain_dict["x"]=100 print(dict1) del dict1["t"] print(dict1) print(dict2)
結(jié)果:
{'x': 1, 'y': 3, 't': 12, 'a': 10}
{'x': 100, 'y': 3, 't': 12, 'a': 10}
{'x': 100, 'y': 3, 'a': 10}
{'x': 5, 'z': 3}
maps屬性可輸出所以合并的字典
from collections import ChainMap dict1={"x":1,"y":3,"t":12} dict2={"x":5,"z":3} chain_dict=ChainMap(dict1,dict2) print(chain_dict.maps)
結(jié)果:
[{'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3}]
new_child()方法是在合并后的映射列表頭部位置插入空映射{}
from collections import ChainMap dict1={"x":1,"y":3,"t":12} dict2={"x":5,"z":3} chain_dict=ChainMap(dict1,dict2) print(chain_dict.maps) a=chain_dict.new_child() print(a) print(a.maps)
結(jié)果:
[{'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3}]
ChainMap({}, {'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3})
[{}, {'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3}]
new_child()可以衍生出parent()方法的使用,parent()其實(shí)是在合并后的映射列表去掉頭部位置第一個(gè)映射后的結(jié)果:
from collections import ChainMap dict1={"x":1,"y":3,"t":12} dict2={"x":5,"z":3} chain_dict=ChainMap(dict1,dict2) print(chain_dict.maps) a=chain_dict.new_child() print(a) print(a.maps) b=a.parents print("b=",b) bb=b.parents print("bb=",bb)
結(jié)果:
[{'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3}]
ChainMap({}, {'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3})
[{}, {'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3}]
b= ChainMap({'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3})
bb= ChainMap({'x': 5, 'z': 3})
鏈接字典的應(yīng)用:
鏈接字典及它的new_child和parent方法特性適合處理作用域及查找鏈類似問題:
1,查找鏈
import builtins pylookup = ChainMap(locals(), globals(), vars(builtins))
2,作用域
比如用戶指定的命令行參數(shù)優(yōu)先于環(huán)境變量的示例,而環(huán)境變量?jī)?yōu)先于默認(rèn)值:
import os, argparse defaults = {'color': 'red', 'user': 'guest'} parser = argparse.ArgumentParser() parser.add_argument('-u', '--user') parser.add_argument('-c', '--color') namespace = parser.parse_args() command_line_args = {k:v for k, v in vars(namespace).items() if v} combined = ChainMap(command_line_args, os.environ, defaults) print(combined['color']) print(combined['user'])
用例參考資料:
到此這篇關(guān)于python ChainMap的使用的文章就介紹到這了,更多相關(guān)python ChainMap的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?ORM數(shù)據(jù)庫框架Sqlalchemy的使用教程詳解
對(duì)象關(guān)系映射(Object?Relational?Mapping,簡(jiǎn)稱ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù)。本文主要介紹了其使用的相關(guān)資料,感興趣的小伙伴可以學(xué)習(xí)一下2022-10-10python實(shí)現(xiàn)在多維數(shù)組中挑選符合條件的全部元素
今天小編就為大家分享一篇python實(shí)現(xiàn)在多維數(shù)組中挑選符合條件的全部元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11python requests包的request()函數(shù)中的參數(shù)-params和data的區(qū)別介紹
這篇文章主要介紹了python requests包的request()函數(shù)中的參數(shù)-params和data的區(qū)別介紹,具有很好參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05python?selenium中Excel數(shù)據(jù)維護(hù)指南
這篇文章主要給大家介紹了關(guān)于python?selenium中Excel數(shù)據(jù)維護(hù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03