今天因为项目需求,需要进行字典的合并与更新,遂有以下的方法并对其进行时间效率的比较:

#!/usr/bin/python
import time
def f1(d1, d2):
    return dict(d1, **d2)

def f2(d1, d2):
    return dict(list(d1.items()) + list(d2.items()))

def f3(d1, d2):
    d = d1.copy()
    d.update(d2)
    return d

def f4(d1, d2):
    d1.update(d2)
    return d1

def f5(d1, d2):
    d = dict(d1)
    d.update(d2)
    return d

def f6(d1, d2):
    return (lambda a, b: (lambda a_copy: a_copy.update(b) or a_copy)(a.copy()))(d1, d2)

def f7(d1, d2):
    d = {}
    d.update(d1)
    d.update(d2)
    return d

def t(f, n):
    st = time.time()
    for i in range(1000000):
        dic1 = {'a': 'AA', 'b': 'BB', 'c': 'CC'}
        dic2 = {'a': 'aa', 'B': 'bb', 'C': 'cc'}
        dic3 = f(dic1, dic2)
    et = time.time()
    print('%s cost:%s' % (n, et - st))
    return dic3

dic1 = t(f1, 'f1')
print(dic1)
dic2 = t(f2, 'f2')
print(dic2)
dic3 = t(f3, 'f3')
print(dic3)
dic4 = t(f4, 'f4')
print(dic4)
dic5 = t(f5, 'f5')
print(dic5)
dic6 = t(f6, 'f6')
print(dic6)
dic7 = t(f7, 'f7')
print(dic7)

结果:

f1 cost:1.7775485515594482
{'a': 'aa', 'b': 'BB', 'c': 'CC', 'B': 'bb', 'C': 'cc'}
f2 cost:5.397264719009399
{'a': 'aa', 'b': 'BB', 'c': 'CC', 'B': 'bb', 'C': 'cc'}
f3 cost:1.5443964004516602
{'a': 'aa', 'b': 'BB', 'c': 'CC', 'B': 'bb', 'C': 'cc'}
f4 cost:1.4223535060882568
{'a': 'aa', 'b': 'BB', 'c': 'CC', 'B': 'bb', 'C': 'cc'}
f5 cost:1.9414927959442139
{'a': 'aa', 'b': 'BB', 'c': 'CC', 'B': 'bb', 'C': 'cc'}
f6 cost:2.7576961517333984
{'a': 'aa', 'b': 'BB', 'c': 'CC', 'B': 'bb', 'C': 'cc'}
f7 cost:1.7975499629974365
{'a': 'aa', 'b': 'BB', 'c': 'CC', 'B': 'bb', 'C': 'cc'}

可以发现,第四种f4的时间效率比较高。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐