Python中合并两个字典

有两个字典:

1
2
3
user = {'name': "Trey", 'website': "http://treyhunner.com"}
defaults = {'name': "Anonymous User", 'page_name': "Profile Page"}

现在想合并两个字典,得到一个新的字典,要求:

  1. 如果存在重复的键,user字典中的值应覆盖defaults字典中的值;
  2. defaults和user中的键可以是任意合法的键;
  3. defaults和user中的值可以是任意值;
  4. 在创建context字典时,defaults和user的元素不能出现变化;
  5. 更新context字典时,不能更改defaults或user字典。

以上两个字典合并结果为:

1
{'website': 'http://treyhunner.com', 'name': 'Trey', 'page_name': 'Profile Page'}

Python 3 中最优雅的实现方法:

1
context = {**defaults, **user}

Python 2 中:

多次更新
1
2
3
context = {}
context.update(defaults)
context.update(user)

这里我们创建了一个新的空字典,并使用其update方法从其他字典中添加元素。请注意,我们首先添加的是defaults字典中的元素,以保证user字典中的重复键会覆盖掉defaults中的键。

复制,然后更新
1
2
context = defaults.copy()
context.update(user)
ChainMap转换成字典
1
context = dict(ChainMap(user, defaults))