您的位置:首页 > 编程语言 > Python开发

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每日一练

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python