问题
现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在。
解决方案
使用 collections
模块中的 ChainMap
类
ChainMap类
1. 一个 ChainMap
接受多个字典并将它们在逻辑上变为一个字典。 然后,这些字典并不是真的合并在一起了, ChainMap
类只是在内部创建了一个容纳这些字典的列表 并重新定义了一些常见的字典操作来遍历这个列表。大部分字典操作都是可以正常使用的。
a={ 'x':1,'z':3}b={ 'y':2,'z':6}from collections import ChainMapc=ChainMap(a,b)print(c) ChainMap({'x': 1, 'z': 3}, {'z': 6, 'y': 2})print(len(c)) 3print(list(c.keys())) ['x', 'z', 'y']print(list(c.values())) [1, 3, 2]print(c['z']) 3
2. 如果出现重复键,那么第一次出现的映射值会被返回。对于字典的更新或删除操作也总是影响的是列表中第一个字典。
3. 更新ChainMap字典和更新原字典,他们彼此都会随之更新。
c['z']=30print(a);print(b) { 'x': 1, 'z': 30} { 'z': 6, 'y': 2}a['x']=100print(c) ChainMap({ 'x': 100, 'z': 30}, { 'z': 6, 'y': 2})