python-进阶教程-多个字典(映射)的合并

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()方法进行合并,但这会构建出一个新的字典。并且,原始字典的数据更新够,新字典中的数据不会随之更新。

猜你喜欢

转载自blog.csdn.net/qq_17753903/article/details/85565458