collections模块的ChainMap可以将多个字典组合成一个可更新的视图, 在使用时, 允许你将多个字典视为一个字典, 这正是ChainMap的作用
dic1 = {'python': 100}
dic2 = {'c++': 99}
这是两个简单的字典,假如要求你对他们进行遍历,你该如何操作呢?最粗暴的方法是用两个for循环分别对他们进行遍历,但这样做未免过于繁琐
dic1 = {'python': 100}
dic2 = {'c++': 99}
for key, value in dic1.items():
print(key, value)
for key, value in dic2.items():
print(key, value)
ChainMap 并不是真的将字典合并在一起,那样的话会产生一个新的字典,使用ChainMap可以让我们以更简洁的代码遍历多个字典
from collections import ChainMap
dic1 = {'python': 100}
dic2 = {'c++': 99}
dic = ChainMap(dic1, dic2)
print(type(dic))
for key, value in dic.items():
print(key, value)
程序输出结果
<class 'collections.ChainMap'>
c++ 99
python 100
需要注意的是ChainMap返回的对象类型并不是字典
你可能会好奇,ChainMap是怎么做到允许你像往常一样遍历字典的,其实非常简单,ChainMap 将多个字典保存到列表里,当你遍历dic时,它在内部循环这个列表,对每一个字典进行遍历。
为了进阶提升,我们可以利用生成器实现类似的效果
dic1 = {'python': 100}
dic2 = {'c++': 99}
def pair_chain(*args):
for dic in args:
for key in dic:
yield key, dic[key]
for key, value in pair_chain(dic1, dic2):
print(key, value)
效果一点都不比ChainMap差
QQ交流群: 211426309