<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 1.20 合并多个字典或映射
有多个字典或映射 将他们从逻辑上合并为一个单一的映射后执行某些操作 比如 查找值或检查某些键是否存在
Step1:  一个 ChainMap 接受多个 dict 将他们在逻辑上变为一个 dict 然后 这些 dict 不是真的合并在一起了 ChainMap 类只是在内部创建了一个容纳这些 dict 的 list and 重新定义了一些常用的 dict 操作来遍历这些列表 大部分 dict 都是正常使用的
Step2:  if 出现重复键 即 其中 'z' 那么以第一次出现的映射值为主 同时被返回 SO 其中 c['z'] 总是返回 dict a 中 对应的值 而不是 b 中的值<br>对于 dict 的更新或删除操作总是影响的列表中的 第一个 dict
Step3:  知道为啥以上 key 他妈都找不到了，并未按顺序进行 这里的顺序是指 Time Line 按时间先后执行
Step4:  ChainMap 对于语言中 variable 作用范围 (globals , locals)非常有用 will make something easy
Step5:  作为 ChainMap 的替代 考虑使用 update 将两个 dict 合并
Step6:  虽然以上可行 但需要创建一个完全不同的 dict 对象 (可能破坏现有 dict 结构) 同时 若 原 dict 做了更新 这种更新不会反映到 新的合并 dict 中去
Step7:  ChainMap 使用原来 dict 他自己不会创建 new dict SO 其 会影响其本身
<ASSISTANT_TASK:>
Python Code:
a = {'x': 1, 'z': 3}
b = {'y': 2, 'z': 4}
# 需在两 dict 中执行查找操作 (先从 a 中找，若是找不到，再在 b 中找)
from collections import ChainMap
c = ChainMap(a,b)
print(c['x'])
print(c['y'])
print(c['z'])
Explanation: 1.20 合并多个字典或映射
有多个字典或映射 将他们从逻辑上合并为一个单一的映射后执行某些操作 比如 查找值或检查某些键是否存在
End of explanation
len(c)
list(c.keys())
list(c.values())
Explanation: 一个 ChainMap 接受多个 dict 将他们在逻辑上变为一个 dict 然后 这些 dict 不是真的合并在一起了 ChainMap 类只是在内部创建了一个容纳这些 dict 的 list and 重新定义了一些常用的 dict 操作来遍历这些列表 大部分 dict 都是正常使用的
End of explanation
c['z'] = 10
c['w'] = 80
del c['x']
Explanation: if 出现重复键 即 其中 'z' 那么以第一次出现的映射值为主 同时被返回 SO 其中 c['z'] 总是返回 dict a 中 对应的值 而不是 b 中的值<br>对于 dict 的更新或删除操作总是影响的列表中的 第一个 dict
End of explanation
c_old = ChainMap(a,b)
c_old
type(c_old)
Explanation: 知道为啥以上 key 他妈都找不到了，并未按顺序进行 这里的顺序是指 Time Line 按时间先后执行
End of explanation
values = ChainMap()
values['x'] = 1
# Add a new mapping
values = values.new_child()
values['x'] = 2
# Add a new mapping
values = values.new_child()
values['x'] = 3
values
values['x']
# Discard last mapping
values = values.parents
values['x']
# Discard last mapping
values = values.parents
values['x']
values
Explanation: ChainMap 对于语言中 variable 作用范围 (globals , locals)非常有用 will make something easy
End of explanation
a = {'x':1,'z':3}
b = {'y':2,'z':4}
merged = dict(b)
merged.update(a)
print(merged['x'],'\n\n',merged['y'],'\n\n',merged['z'])
Explanation: 作为 ChainMap 的替代 考虑使用 update 将两个 dict 合并
End of explanation
a['x']  = 19
merged['x']
Explanation: 虽然以上可行 但需要创建一个完全不同的 dict 对象 (可能破坏现有 dict 结构) 同时 若 原 dict 做了更新 这种更新不会反映到 新的合并 dict 中去
End of explanation
a = {'x': 1, 'z': 3}
b = {'y': 2, 'z': 4}
merged = ChainMap(a,b)
merged['x']
a['x'] = 43
merged['x'] # Notice change to merged dict
Explanation: ChainMap 使用原来 dict 他自己不会创建 new dict SO 其 会影响其本身
End of explanation
<END_TASK>