有两个字典:
1 | user = {'name': "Trey", 'website': "http://treyhunner.com"} |
现在想合并两个字典,得到一个新的字典,要求:
- 如果存在重复的键,user字典中的值应覆盖defaults字典中的值;
- defaults和user中的键可以是任意合法的键;
- defaults和user中的值可以是任意值;
- 在创建context字典时,defaults和user的元素不能出现变化;
- 更新context字典时,不能更改defaults或user字典。
以上两个字典合并结果为:
1 | {'website': 'http://treyhunner.com', 'name': 'Trey', 'page_name': 'Profile Page'} |
Python 3 中最优雅的实现方法:
1 | context = {**defaults, **user} |
Python 2 中:
多次更新
1 | context = {} |
这里我们创建了一个新的空字典,并使用其update方法从其他字典中添加元素。请注意,我们首先添加的是defaults字典中的元素,以保证user字典中的重复键会覆盖掉defaults中的键。
复制,然后更新
1 | context = defaults.copy() |
ChainMap转换成字典
1 | context = dict(ChainMap(user, defaults)) |