映射合并
作者:互联网
1、假如我们有两个字典,要查找某个关键字,我们必须同时检查这两个字典,比如先在x中查找,如果没有,再在y中查找。
x={'a':1,'c':2} y={'b':3,'c':4}
我们可以使用ChainMap在逻辑上将多个字典合并成一个,以便同时执行某些操作。ChainMap可以接受多个字典,在逻辑上使他们表现为一个单独的映射结构。但是这些映射并不会真正的合并在一起。
from collections import ChainMap z=ChainMap(x,y) print(z) ChainMap({'a': 1, 'c': 2}, {'b': 3, 'c': 4})
ChainMap只是维护了一个记录底层映射关系的列表,如果有重复的值,会采用第一个映射中对应的值,修改映射的操作总是会作用在第一个映射结构上。
print(z['a']) print(z['b']) print(z['c']) 1 3 2 #这里z['c']的输出是第一个映射里的值
z['c']=10 z['d']=20 print(z) #这里只修改了第一个映射里的c,只在第一个映射里添加了键值对:'d':20 ChainMap({'a': 1, 'c': 10, 'd': 20}, {'b': 3, 'c': 4})
del z['a'] #在z里删除关键字a,会在字典x中体现出来 print(x) {'c': 10, 'd': 20} del z['b'] #通过z修改不了字典y KeyError: "Key not found in the first mapping: 'b'"
使用ChainMap后,对原始映射的修改会反映到合并后的结果中
x={'a':1,'c':2} y={'b':3,'c':4} z=ChainMap(x,y) x['a']=10 print(z) ChainMap({'a': 10, 'c': 2}, {'b': 3, 'c': 4})
2、ChainMap和update的比较
对于字典的update方法,如果我们执行x.update(y),x会就地改变,如果y中有和x中一样的关键字,则y中关键字相应的值会覆盖x中相应关键字的值。
x={'a':1,'c':2} y={'b':3,'c':4} x.update(y) print(x) {'a': 1, 'c': 4, 'b': 3}
标签:10,映射,合并,关键字,print,ChainMap,字典 来源: https://www.cnblogs.com/WGJ909001/p/14240396.html