Python每日一练0013
问题
现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在。
解决方案
使用collections
库的ChainMap
类,可以快速的将多个dict
合并在一起
>>> from collections import ChainMap >>> a = {'x': 1, 'z': 3 } >>> b = {'y': 2, 'z': 4 } >>> c = ChainMap(a, b) >>> print(c['x']) 1 >>> print(c['y']) 2 >>> print(c['z']) 3
讨论
ChainMap
可以将多个dict
合并在一起,当做一个整体来处理,并且它比创建一个新的dict
或者使用dict.update()
速度要快
ChainMap
的底层实现是将合并的字典存到一个list
当中,这个list
我们可以通过访问maps
成员得到
>>> from collections import ChainMap >>> a = {'x': 1, 'z': 3 } >>> b = {'y': 2, 'z': 4 } >>> c = ChainMap(a, b) >>> print(c.maps) [{'x': 1, 'z': 3}, {'y': 2, 'z': 4}]
对于查询操作,ChainMap
会扫描这个list
,直到找到key存在然后返回,所以上面的例子,我们的c['z']
得到的是3
而对于增加和删除操作,ChainMap
只会操作list
中的第一个dict
另外一点需要注意的是,ChainMap
是按引用存储的,意思是如果我们修改了原来的dict
,这个修改是会被反射到ChainMap
里,举个例子:
>>> from collections import ChainMap >>> a = {'x': 1, 'z': 3 } >>> b = {'y': 2, 'z': 4 } >>> c = ChainMap(a, b) >>> print(c['x']) 1 >>> a['x'] = 66 >>> print(c['x'])
关于ChainMap
更详细的介绍可以参考:https://docs.python.org/3/lib...
来源
Python Cookbook
关注
欢迎关注我的微信公众号:python每日一练
相关推荐
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
夜斗不是神 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16
坚持是一种品质 2020-11-16
染血白衣 2020-11-16
huavhuahua 2020-11-20
meylovezn 2020-11-20
逍遥友 2020-11-20
weiiron 2020-11-16