其他分享
首页 > 其他分享> > 映射合并

映射合并

作者:互联网

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