0.摘要
当我们处理多个字典(或称为映射,因为字典是Python中唯一的映射结构),可以通过将多个字典合并为一个字典的方式实现批量处理。
1.ChainMap类
a = {'x': 1, 'z': 3 }
b = {'y': 2, 'z': 4 }
from collections import ChainMap
c = ChainMap(a,b)
print(c['x']) # Outputs 1 (from a)
print(c['y']) # Outputs 2 (from b)
print(c['z']) # Outputs 3 (from a)
print('len(c):', len(c)) #len(c): 3
print('c.keys():', list(c.keys())) #c.keys(): ['x', 'y', 'z']
print('c.values():', list(c.values())) #c.values(): [1, 2, 3]
collections.ChainMap类能够将多个映射在逻辑表现上组合为一个单独的映射,但只是维护了一个记录低层映射关系的列表,这多个映射并不会真正合并。
对于重复的键采用第一个映射中的值,但是修改映射的操作也只会作用在第一个映射上。
c['z'] = 10
c['w'] = 40
del c['x']
print("a:", a) #a: {'z': 10, 'w': 40}
另外,ChainMap还而已创建子类:
values = ChainMap()
values['x'] = 1
print(values) #result:ChainMap({'x': 1})
values = values.new_child()
values['x'] = 2
print(values) #result:ChainMap({'x': 2}, {'x': 1})
values = values.new_child()
values['x'] = 3
print(values) #result:ChainMap({'x': 3}, {'x': 2}, {'x': 1})
print(values['x']) #3
values = values.parents
print(values['x']) #2
values = values.parents
print(values['x']) #1
2.优势
我们知道,字典可以通过.update()方法进行合并,但这会构建出一个新的字典。并且,原始字典的数据更新够,新字典中的数据不会随之更新。