Python每日一练0013
2018-04-06 23:14
190 查看
问题
现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在。解决方案
使用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/library/collections.html#collections.ChainMap
来源
Python Cookbook关注
欢迎关注我的微信公众号:python每日一练![](https://github.com/wonter/Daily-Practice-For-Python/blob/master/qrcode_for_gh_ea69ec9854b4_258.jpg?raw=true)
相关文章推荐
- Python每日一练0003
- Python + Requests + BeautifulSoup每日BUG汇总
- python每日一类(4):slice
- Python抓取每日必应壁纸
- python3核心编程每日习题答案
- 利用python爬虫技术获取每天每场的每位球员NBA数据以及每日范特西评分
- python爬虫抓取游民星空每日囧图
- 《每日一课》Python入门之IO编程
- 《每日一课》Python入门之网络编程
- python生成每日报表数据(Excel)并邮件发送
- Python抓取第一网贷中国网贷理财每日收益率指数
- python每日一小记(1)--数据类型和变量
- python每日一小记(3)--使用list和tuple
- 每日一python
- 每天叫醒你的不是闹钟,而是“爱词霸每日一句”——Python实现将每日一句定时推送至微信
- [python每日一练]--0000:图片添加数字
- python每日一函数 - divmod数字处理函数
- Python每日一练0004
- [python每日一练]--0001:生成激活码并存储到mysql数据库
- 每日一练(python版本)