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

猜你喜欢

转载自blog.csdn.net/yangjiajia123456/article/details/80294593