Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
本文实例讲述了Python将多个映射合并为单个映射的方法。分享给大家供大家参考,具体如下:
问题:在逻辑上将多个字典或映射合并为一个单独的映射结构,以此执行某些特定的操作,比如查找值或者检查键是否存在
解决方案:利用collections模块中的ChainMap类
ChainMap可接受多个映射然后在逻辑上使它们表现为一个单独的映射结构。这些映射在字面上并不会合并在一起。相反,ChainMap只是简单地维护一个记录底层映射关系的列表,然后重定义常见的字典操作来扫描这个列表。
#example.py # #Exampleofcombiningdictsintoachainmap a={'x':1,'z':3} b={'y':2,'z':4} #(a)Simpleexampleofcombining fromcollectionsimportChainMap c=ChainMap(a,b)#如果有重复的键,那么会采用第一个映射中所对应的值。 print(c['x'])#Outputs1(froma) print(c['y'])#Outputs2(fromb) print(c['z'])#Outputs3(froma) #Outputsomecommonvalues print('len(c):',len(c)) print('c.keys():',list(c.keys())) print('c.values():',list(c.values())) #Modifysomevalues c['z']=10 c['w']=40 print("a:",a) delc['x'] print("a:",a) #Exampleofstackingmappings(likescopes) values=ChainMap() values['x']=1 #Addanewmapping values=values.new_child() values['x']=2 #Addanewmapping values=values.new_child() values['x']=3 print(values) print(values['x']) #Discardlastmapping values=values.parents print(values) print(values['x']) #Discardlastmapping values=values.parents print(values) print(values['x'])
>>>================================RESTART================================ >>> 1 2 3 len(c):3 c.keys():['y','x','z'] c.values():[2,1,3] a:{'x':1,'z':10,'w':40} a:{'z':10,'w':40} ChainMap({'x':3},{'x':2},{'x':1}) 3 ChainMap({'x':2},{'x':1}) 2 ChainMap({'x':1}) 1 >>>
另外ChainMap操作的是原始字典,可以避免一些令人不悦的行为,例如其中任何一个原始字典的修改无法反应到合并后的字典中。
>>>a={'x':1,'z':3} >>>b={'y':2,'z':4} >>>merged=ChainMap(a,b) >>>merged ChainMap({'x':1,'z':3},{'y':2,'z':4}) >>>merged['x'] 1 >>>a['x']=55 >>>merged['x'] 55 >>>merged ChainMap({'x':55,'z':3},{'y':2,'z':4}) >>>
(代码摘自《PythonCookbook》)
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。