Aar*_*lin 6 python performance
如何:
dict = {}
if key not in dict:
dict[key] = foo
Run Code Online (Sandbox Code Playgroud)
相比于:
try:
dict[key]
except KeyError:
dict[key] = foo
Run Code Online (Sandbox Code Playgroud)
也就是说,无论如何都要比线性搜索更快地查找一个键dict.keys(),我假设第一个表单会做什么?
您正在寻找setdefault方法:
>>> r = {}
>>> r.setdefault('a', 'b')
'b'
>>> r
{'a': 'b'}
>>> r.setdefault('a', 'e')
'b'
>>> r
{'a': 'b'}
Run Code Online (Sandbox Code Playgroud)
答案取决于键在字典中出现的频率(顺便说一句,有人向你提到过隐藏内置函数(例如隐藏在dict变量后面)是多么糟糕的想法吗?)
if key not in dct:
dct[key] = foo
Run Code Online (Sandbox Code Playgroud)
如果键在字典中,则执行一次字典查找。如果键在字典中,它会查找字典两次。
try:
dct[key]
except KeyError:
dct[key] = foo
Run Code Online (Sandbox Code Playgroud)
对于键在字典中的情况,这可能会稍微快一些,但是抛出异常会产生相当大的开销,因此它几乎总是不是最佳选择。
dct.setdefault(key, foo)
Run Code Online (Sandbox Code Playgroud)
setdefault这个有点棘手:它总是涉及两次字典查找:第一个是在类中查找方法,第二个是在对象中dict查找。此外,如果是一个表达式,每次都会对其进行求值,而早期的选项仅在必须时才对其进行求值。keydctfoo
还看看collections.defaultdict。对于一大类这样的情况,这是最合适的解决方案。
| 归档时间: |
|
| 查看次数: |
5137 次 |
| 最近记录: |