python每日一题公众号_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'])

来源

Python Cookbook

关注

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值