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

新手上路,请多包涵

说我有三个听写

d1={1:2,3:4}
d2={5:6,7:9}
d3={10:8,13:22}

我如何创建一个新的 d4 结合了这三个词典? IE:

 d4={1:2,3:4,5:6,7:9,10:8,13:22}

原文由 timy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 196
1 个回答
  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

  1. 最快:充分利用 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

  1. 中等: 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

  1. 或者,等价地,一个复制构造函数和两个更新:
    $ 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

我推荐方法 (2),我特别推荐避免 (1)(它还占用 O(N) 额外的辅助内存用于项目临时数据结构的串联列表)。

原文由 Alex Martelli 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题