如何连接两个字典以创建一个新字典?
假设我有三个字典
d1={1:2,3:4}
d2={5:6,7:9}
d3={10:8,13:22}
我该如何创建一个新的 d4
,把这三个字典合并在一起呢?也就是说:
d4={1:2,3:4,5:6,7:9,10:8,13:22}
5 个回答
106
你可以使用 update()
这个方法来创建一个新的字典,里面包含所有的项目:
dall = {}
dall.update(d1)
dall.update(d2)
dall.update(d3)
或者,你也可以用一个循环来实现:
dall = {}
for d in [d1, d2, d3]:
dall.update(d)
202
在Python 2中:
d4 = dict(d1.items() + d2.items() + d3.items())
在Python 3中(而且据说速度更快):
d4 = dict(d1)
d4.update(d2)
d4.update(d3)
这两个答案来自之前的一个StackOverflow问题,链接在这里:这里。
360
最慢的方法,而且在Python3中不管用:把
items
合并起来,然后对合并后的列表调用dict
:$ python -mtimeit -s'd1={1:2,3:4}; d2={5:6,7:9}; d3={10:8,13:22}' \ 'd4 = dict(d1.items() + d2.items() + d3.items())' 100000 loops, best of 3: 4.93 usec per loop
最快的方法:充分利用
dict
构造函数,然后只需要一次update
:$ python -mtimeit -s'd1={1:2,3:4}; d2={5:6,7:9}; d3={10:8,13:22}' \ 'd4 = dict(d1, **d2); d4.update(d3)' 1000000 loops, best of 3: 1.88 usec per loop
中等速度:在一个最开始是空的字典上循环调用
update
:$ python -mtimeit -s'd1={1:2,3:4}; d2={5:6,7:9}; d3={10:8,13:22}' \ 'd4 = {}' 'for d in (d1, d2, d3): d4.update(d)' 100000 loops, best of 3: 2.67 usec per loop
或者,等效的方法是先复制一次构造函数,然后再进行两次更新:
$ python -mtimeit -s'd1={1:2,3:4}; d2={5:6,7:9}; d3={10:8,13:22}' \ 'd4 = dict(d1)' 'for d in (d2, d3): d4.update(d)' 100000 loops, best of 3: 2.65 usec per loop
我推荐第二种方法,特别是要避免第一种方法(因为它还会占用O(N)的额外内存,用来存放合并后的临时数据结构)。