python-進階教程-多個字典(對映)的合併
阿新 • • 發佈:2019-01-11
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()方法進行合併,但這會構建出一個新的字典。並且,原始字典的資料更新夠,新字典中的資料不會隨之更新。