从流行的信息和搜索网络+ stackoverflow,似乎“in”比python字典中的键查找更快“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倍。这真是令人费解 - 有谁知道发生了什么?
答案 0 :(得分:11)
它是f in FDICT
,而不是f in FDICT.keys()
。使用keys
构建所有密钥的列表并逐个遍历,而使用f in FDICT
使用有效的基于散列的查找。
答案 1 :(得分:3)
if f in FDICT.keys()
因为您每次循环都会生成密钥列表。
尝试将其替换为f in fDICT
答案 2 :(得分:1)
可能是因为您正在调用FDICT.keys():
,必须创建一个密钥列表。您想要f in FDICT:
,它具有相同的结果,但不需要生成密钥列表。
在任何情况下,我都听说传统的优化方法是假设密钥在dict中,如果不是
就抓住KeyError