博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python每日一练0013
阅读量:5884 次
发布时间:2019-06-19

本文共 955 字,大约阅读时间需要 3 分钟。

问题

现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在。

解决方案

使用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更详细的介绍可以参考:

来源

Python Cookbook

关注

欢迎关注我的微信公众号:python每日一练

转载地址:http://orlix.baihongyu.com/

你可能感兴趣的文章
游戏开发基础:方向键的组合,八方向实现
查看>>
黑书-DP-方块消除 ****
查看>>
MySQL 分区
查看>>
我的架构经验系列文章 - 后端架构 - 语言层面
查看>>
DEFERRED_SEGMENT_CREATION
查看>>
读取手机硬件信息
查看>>
一致哈希
查看>>
The connection to adb is down, and a severe error has occured. 问题解决
查看>>
在Jenkins中配置运行远程shell命令
查看>>
代码杂记
查看>>
linux中防CC攻击两种实现方法(转)
查看>>
《Programming WPF》翻译 第9章 4.模板
查看>>
Windows7+VS2012下OpenGL 4的环境配置
查看>>
Linux Kernel中断子系统来龙去脉浅析【转】
查看>>
Linux NFS服务器的安装与配置
查看>>
Ada boost学习
查看>>
Unity中SendMessage和Delegate效率比较
查看>>
Linux下EPoll通信模型简析
查看>>
react-native 制作购物车ShopCart
查看>>
Linux服务器 java生成的图片验证码乱码问题
查看>>