from collections import ChainMap
a = {"x": 1, "y": 2}
b = {"x": 2, "z": 3, "y": 4}
c = ChainMap(a, b)
# ChainMap连接起来的数据结构在进行查找的时候是先从第一个元素对应的字典中查找相应的键,没有找到才会找第二个
print(c["x"], c["y"], c["z"])
# ChainMap得到的数据结构和字典差不多,仍然可以使用字典的常用方法
print(list(c.keys())) # ["x", "z", "y"]
print(list(c.values())) # [1, 3, 2]
# 对ChainMap得到的数据结构的更新或者删除操作,总是反映到第一个字典上。
c["z"] = 10
print(a, b) # {'x': 1, 'y': 2, 'z': 10} {'x': 2, 'z': 3, 'y': 4}
del c["x"] # 如果在第一个字典中没有找到对应的键,会报错
print(a, b) # {'y': 2, 'z': 10} {'x': 2, 'z': 3, 'y': 4}
# ChainMap可以不需要传递参数
values = ChainMap()
values["a"] = 1
# 会在最前方新建一个字典,返回一个新的ChainMap数据结构, 改变values中的数据,会自动更新到values1中
values1 = values.new_child()
values1["x"] = 2
print(values, values1)
# 仍然可以通过子ChainMap数据结构的parents属性得到父亲
print(values1.parents) # ChainMap({'a': 1})
# 使用update更新字典操作
a = {"x": 1, "z": 3}
b = {"y": 2, "z": 4}
a.update(b) # update方法会就地修改调用者的数据,但是如果参数b中数据变化,不会反映到a上
print(a, b)
b["c"] = 5
print(a, b) # {'x': 1, 'z': 4, 'y': 2} {'y': 2, 'z': 4, 'c': 5}
1_20_使用collection中的ChainMap从逻辑上连接两个字典
最新推荐文章于 2023-07-30 22:13:39 发布