1. 程式人生 > >python將多個對映合併為一個對映

python將多個對映合併為一個對映

我們有時需要將多個字典合併成一個單獨的對映結構,但不同的字典之間可能有相同的鍵,又不想將鍵覆蓋掉,於是可以使用ChainMap類來實現。它在邏輯上將不同的字典合併為一個單獨的對映結構。

from pprint import pprint
from collections import ChainMap

a = {'x': 1, 'y': 2, 'z': 3}
b = {'y': 4, 'z': 5, 'm': 6, 'n': 8}
c = {'m': 6, 'n': 10, 'a': 7, 'b': 0, 'c': 9}

d = ChainMap(a, b, c)
pprint(d)

輸出結果

ChainMap({'x': 1, 'y': 2, 'z': 3},
         {'m': 6, 'n': 8, 'y': 4, 'z': 5},
         {'a': 7, 'b': 0, 'c': 9, 'm': 6, 'n': 10})

ChainMap接受多個對映然後在邏輯上表現為一個單獨的對映。但是,這些字典並不會在事實上合併在一起。ChainMap只是簡單地維護一個記錄底層對映關係的列表,然後重新定義常見的字典操作來掃描這個列表。

print(list(d.keys()))
print(list(d.values()))

每次執行輸出的序列的值的順序都不相同

['x', 'n', 'a', 'm', 'y', 'b', 'c', 'z']
[1, 8, 7, 6, 2, 0, 9, 3]
.
.
.
['a', 'x', 'm', 'y', 'n', 'z', 'b', 'c']
[7, 1, 6, 2, 8, 3, 0, 9]

如果有重複的鍵,那麼會輸出第一個查到的鍵。

print(d['n'])

8