python-ChainMap将多个映射合并为单个映射

1.20 ChainMap如何将多个字典映射,合并为一个单独的映射结构。
  • 我们有如下的两个字典
>>> a ={'x':1,'z':3}
>>> b ={'y':2,'z':5}
>>> from collections import ChainMap
>>> c = ChainMap(a,b)
>>> c
ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 5})
>>> print(c['x'])
1
>>> print(c['y'])
2
>>> print(c['z'])
3
>>>
  • 可以看出来,ChainMap并不是将所有映射去全部合并在一起,相反,ChainMap只是简单的维护一个记录底层映射关系的列表,然后重定义常见的字典操作来扫描这个列表,大部分的字典操作都可以对ChainMap操作。
>>> len(c)
3
>>> list(c.keys())
['y', 'z', 'x']
>>> list(c.values())
[2, 3, 1]
>>>
  • 对于重复的键,ChainMap只会采用第一个字典中的value,如上z只会取3,不会拿5。
  • 同时,修改ChainMap的键值映射也只会作用在第一个字典上,如:
>>> c['z']=10
>>> c['w']=20
>>> a
{'x': 1, 'z': 10, 'w': 20}
>>> b
{'y': 2, 'z': 5}
>>> c
ChainMap({'x': 1, 'z': 10, 'w': 20}, {'y': 2, 'z': 5})
>>> del c['x']
>>> del c['y']
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/collections/__init__.py", line 970, in __delitem__
    del self.maps[0][key]
KeyError: 'y'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/collections/__init__.py", line 972, in __delitem__
    raise KeyError('Key not found in the first mapping: {!r}'.format(key))
KeyError: "Key not found in the first mapping: 'y'"
  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值