python之合并多个字典或映射

问题

现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在。

解决方案

假如你有如下两个字典:

a = {'x': 1, 'z': 3}
b = {'y': 2, 'z': 4}

一:update 将两个字典合并

# 不改变原字典,新建c合并后的字典
c =dict(a)
c.update(b)
print(c)  # {'x': 1, 'z': 4, 'y': 2}

# 更新原字典,更新的内容会覆盖老的内容
a.update(b)
print(a)  # {'x': 1, 'z': 4, 'y': 2}

update 缺点:但是它需要你创建一个完全不同的字典对象(或者是破坏现有字典结构)。 同时,如果原字典做了更新,这种改变不会反应到新的合并字典中去。

二: ChainMap 在内部创建了一个容纳这些字典的列表 并重新定义了一些常见的字典操作来遍历这个列表。大部分字典操作都是可以正常使用的

from collections import ChainMap
d=ChainMap(a,b)
print(d)  # ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4})
print(list(d.keys()))  # ['y', 'x', 'z'] 顺序乱了,不准
print(list(d.values()))  # [2, 3, 1]  顺序乱了,不准
print(d["z"])  # 出现重复键,那么第一次出现的映射值会被返回。 因此,例子程序中的 c['z'] 总是会返回字典 a 中对应的值,而不是 b 中对应的值

猜你喜欢

转载自www.cnblogs.com/zzy-9318/p/10418278.html