how to concatenate two dictionaries to create a new one in Python?

This question already has an answer here:

  • How to merge two dictionaries in a single expression? 48 answers

  • Slowest and doesn't work in Python3: concatenate the items and call dict on the resulting list:

    $ 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
    
  • Fastest: exploit the dict constructor to the hilt, then one 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
    
  • Middling: a loop of update calls on an initially-empty dict:

    $ 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
    
  • Or, equivalently, one copy-ctor and two updates:

    $ 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
    
  • I recommend approach (2), and I particularly recommend avoiding (1) (which also takes up O(N) extra auxiliary memory for the concatenated list of items temporary data structure).


    d4 = dict(d1.items() + d2.items() + d3.items())
    

    alternatively (and supposedly faster):

    d4 = dict(d1)
    d4.update(d2)
    d4.update(d3)
    

    Previous SO question that both of these answers came from is here.


    You can use the update() method to build a new dictionary containing all the items:

    dall = {}
    dall.update(d1)
    dall.update(d2)
    dall.update(d3)
    

    Or, in a loop:

    dall = {}
    for d in [d1, d2, d3]:
      dall.update(d)
    
    链接地址: http://www.djcxy.com/p/17556.html

    上一篇: Python中的dict对象的联合

    下一篇: 如何连接两个字典在Python中创建一个新的字典?