从流行的信息以及在net+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”会使代码的速度提高5000倍,即使是在非常小的文件上。这很令人费解——有人知道发生了什么吗?在
这可能是因为您正在调用
FDICT.keys():
,它必须创建一个密钥列表。您希望执行f in FDICT:
,它有相同的结果,但不需要生成密钥列表。在在任何情况下,我听说传统的优化方法是假设密钥在dict中,如果不在dict中,只捕获{}
它是}。使用
f in FDICT
,而不是{keys
生成所有键的列表并逐个遍历,而使用f in FDICT
则使用高效的基于哈希的查找。在因为每次循环时都会生成键列表。在
尝试用
f in fDICT
替换它相关问题 更多 >
编程相关推荐