ChainMap---合并多个字典

collections模块的ChainMap可以将多个字典组合成一个可更新的视图, 在使用时, 允许你将多个字典视为一个字典, 这正是ChainMap的作用

1. 遍历多个字典

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)

2. 合并遍历

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返回的对象类型并不是字典

3. 自己动手实现类似的功能

你可能会好奇,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

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案