1. 程式人生 > >python-進階教程-多個字典(對映)的合併

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()方法進行合併,但這會構建出一個新的字典。並且,原始字典的資料更新夠,新字典中的資料不會隨之更新。