ChainMap 对象
链映射,可以看作一类特殊的字典列表。
from collections import ChainMap
# 创建链式映射,参数默认为1个空字典
cm = ChainMap({'a': 1}, {'a': 2}, {'b': 3})
# 返回字典列表,按创建时的参数顺序排列
print('\nmaps:\n', cm.maps)
# 返回所有的键,按创建时的参数逆序排列,不重复
print('\nlist(ChainMap):\n', list(cm))
# 逆序遍历,按搜索到的key排列,key的值不断更新为最后搜索到的值
print('\nitems():\n', list(cm.items()))
print(dict(cm))
# 返回新的ChainMap类,在链头插入新映射
print('\nnew_child():\n', cm.new_child({'c': 4}))
# 返回新的ChainMap类,删去链头映射
print('\nparents:\n', cm.parents)
# 更新时只更新链中第一个映射
cm['a'] = 0
cm['b'] = 4
cm['c'] = 5
print('update:\n', cm)
# 删除时只在链的第一个映射中删除,无法删除后续映射
del cm['a']
print('\ndelete:\n', cm)
try:
print('\ndelete again:')
del cm['a']
except:
print('Can not delete posterior map keys.')
# 顺序查询,返回第一个查到的值
print('\nSearch:')
print("cm['a']:", cm['a'])
print("cm['b']:", cm['b'])
输出:
maps:
[{'a': 1}, {'a': 2}, {'b': 3}]
list(ChainMap):
['b', 'a']
items():
[('b', 3), ('a', 1)]
{'b': 3, 'a': 1}
new_child():
ChainMap({'c': 4}, {'a': 1}, {'a': 2}, {'b': 3})
parents:
ChainMap({'a': 2}, {'b': 3})
update:
ChainMap({'a': 0, 'b': 4, 'c': 5}, {'a': 2}, {'b': 3})
delete:
ChainMap({'b': 4, 'c': 5}, {'a': 2}, {'b': 3})
delete again:
Can not delete posterior map keys.
Search:
cm['a']: 2
cm['b']: 4