两个字典以下:python
合并后的结果以下(即,key相同时后面字典值覆盖前面字典):ui
{'sex': 'male', 'name': 'revotu', 'age': 24}
首先,说明字典并不支持+加法运算spa
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
现总结以下几种方法以及简要分析比较。code
首先建立一个空字典,并使用update方法向字典中添加元素。注意,先添加的是d1,以保证后面添加的d2重复键会覆盖d1。
此方法知足了咱们的要求,并且清晰明确,但是三行代码总感受不够Pythonic。对象
对比方法一,这种复制d1的方法,更明显的表现出d1做为默认值。字符串
与方法二很类似,可是没有方法二直接明了。string
只有一行代码,看上去很酷,可是有一个问题,这种hack技巧只有在字典的键是字符串时才有效。it
看上去很cool,可是不通用,字典的键必须是字符串才能够用这种关键字参数方法。io
字典推导式方法知足要求,只是嵌套的字典推导式,不那么清晰,不易于理解。ast
>>> d = dict(list(d1.items()) + list(d2.items()))
并且,d2的元素在列表后面,因此在键重复时能够覆盖d1。若是在Python2中,items()方法自己返回的就是列表,无需用list()转成列表。
元素拼接在构造字典能够知足要求,只是看上去代码有些重复。
>>> d = dict(d1.items() | d2.items())
这种方法挺有意思,但是并不许确,由于集合是无序的,键重复时不能保证谁覆盖谁,并且字典中的值一般也是不可哈希的,固然也就不能返回一个相似集合的对象。
>>> d = dict(chain(d1.items(), d2.items()))
这种方案很不错,可能比另外建立两个没必要要的列表更高效。
这种方法也很pythonic,并且也是通用方法。
>>> d = {**d1, **d2}
这行代码很pythonic,若是是你的python版本是3.5+,用这种方法是很不错的选择。
上面说了十种能够合并两个字典成一个新字典的方式,具体用哪一个取决于你。
若是使用的是Python3.5+的版本,那么字典拆分这种新语法应该很适合你: