如何连接两个字典以创建一个新字典?

366 投票
5 回答
622630 浏览
提问于 2025-04-15 16:17

假设我有三个字典

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
  1. 最慢的方法,而且在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
    
  2. 最快的方法:充分利用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
    
  3. 中等速度:在一个最开始是空的字典上循环调用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
    
  4. 或者,等效的方法是先复制一次构造函数,然后再进行两次更新:

    $ 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)的额外内存,用来存放合并后的临时数据结构)。

撰写回答