(意外地)Python字典“has_key”比“in”更快
根据网上的热门信息和StackOverflow的讨论,似乎在Python字典中,用"in"来查找键比用"has_key"要快。不过,我最近的经验却恰恰相反,我也不知道为什么会这样。考虑以下代码:
for f in F:
if 'A' in f:
AList.append(f)
#if f in FDICT.keys():
if FDICT.has_key(f):
idx_AList.append(FDICT[f])
elif 'B' in f:
BList.append(f)
#if f in FDICT.keys():
if FDICT.has_key(f):
idx_BList.append(FDICT[f])
在上面的代码中,换成"has_key"后,即使在非常小的文件上,速度也快了50000倍。这真让人困惑——有没有人知道这是怎么回事?
3 个回答
1
这可能是因为你在使用 FDICT.keys():
,这个方法需要先生成一个键的列表。而你其实可以用 f in FDICT:
这种写法,它能得到相同的结果,但不需要生成键的列表。
无论如何,我听说一种更常用的优化方法是,假设这个键在字典里,如果没有找到就捕捉到 KeyError
错误。
3
if f in FDICT.keys()
因为你每次循环的时候都在生成键的列表。
试试用 f in fDICT
来替换它。
11
这里说的是用 f in FDICT
这种写法,而不是 f in FDICT.keys()
。使用 keys
会先把所有的键放到一个列表里,然后一个一个地检查,而直接用 f in FDICT
则是用一种更快的方法来查找。