我有口才
my_dict = {
"1": "sss", "2": "dddd", "3": "ssss",
"4": "ccc", "5": "aaa", "6": "ffff"
}
哪个在时间复杂度方面更有效?
myvar = my_dict.get("7", "default value")
要么
if "7" in my_dict :
myvar = my_dict["7"]
else:
myvar = "default value"
是不是它们都是相同的,因为在执行dict.get时会有if else条件然后返回默认值?
如果你寻找速度,else
方法的工作速度会稍快一些。这种微小的差异发生在
import time
print("++++++++++Small Dict++++++++++++")
my_dict = {
"1": "sss", "2": "dddd", "3": "ssss",
"4": "ccc", "5": "aaa", "6": "ffff"
}
start = time.time()
myvar = my_dict.get("7", "default value")
print("myvar: ", myvar)
print("Time taken for get method: ", time.time() - start)
start = time.time()
if "7" in my_dict :
myvar = my_dict["7"]
else:
myvar = "default value"
print("myvar: ", myvar)
print("Time taken for else method: ", time.time() - start)
print("++++++++++Big Dict++++++++++++")
for i in range(10000):
my_dict[str(i)] = str(i)
start = time.time()
myvar = my_dict.get("100000000", "default value")
print("myvar: ", myvar)
print("Time taken for get method: ", time.time() - start)
start = time.time()
if "100000000" in my_dict :
myvar = my_dict["7"]
else:
myvar = "default value"
print("myvar: ", myvar)
print("Time taken for else method: ", time.time() - start)
产量
++++++++++Small Dict++++++++++++
myvar: default value
Time taken for get method: 8.821487426757812e-06
myvar: default value
Time taken for else method: 7.152557373046875e-06
++++++++++Big Dict++++++++++++
myvar: default value
Time taken for get method: 3.62396240234375e-05
myvar: default value
Time taken for else method: 8.106231689453125e-06
这是两者的比较
d = {str(k): k**2 for k in range(10000)}
In[85]: def check(d):
...: if '899' in d:
...: return d['899']
...: else:
...: return "None"
...:
n[86]: %timeit check(d)
102 ns ± 0.875 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In[87]: %timeit d.get('899', 'None')
62.1 ns ± 0.282 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)