python如何将多个映射合并为一个映射
作者:yangjiajia123456
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
python合并多个字典或者映射
python 中很多时候会用到合并多个字典
首先我们介绍一个collections模块中的ChairMap类
from collections import ChainMap a = {'x': 1, 'z': 3 } b = {'y': 2, 'z': 4 } c = ChainMap(a,b)
如果模块中的键是相同的 会返回第一个值 , 因为是映射 ,所以对它的操作都会对原数组有操作。
如果不想改变原来数组可以使用python 中的update()
a = {'x': 1, 'z': 3 } b = {'y': 2, 'z': 4 } merged = dict(b) merged.update(a)
它需要你创建一个完全不同的字典对象(或者是破坏现有字典结构)。 同时,如果原字典做了更新,这种改变不会反应到新的合并字典中去。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。