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程序设计有所帮助。