(令人惊讶的是)python dict“has_key”比“in”更快

时间:2014-08-28 21:14:32

标签: python dictionary

从流行的信息和搜索网络+ 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倍。这真是令人费解 - 有谁知道发生了什么?

3 个答案:

答案 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