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

2024-06-16 13:17:47 发布

您现在位置:Python中文网/ 问答频道 /正文

从流行的信息以及在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倍,即使是在非常小的文件上。这很令人费解——有人知道发生了什么吗?在


Tags: key代码in信息netif字典keys
3条回答

这可能是因为您正在调用FDICT.keys():,它必须创建一个密钥列表。您希望执行f in FDICT:,它有相同的结果,但不需要生成密钥列表。在

在任何情况下,我听说传统的优化方法是假设密钥在dict中,如果不在dict中,只捕获{}

它是f in FDICT,而不是{}。使用keys生成所有键的列表并逐个遍历,而使用f in FDICT则使用高效的基于哈希的查找。在

if f in FDICT.keys()

因为每次循环时都会生成键列表。在

尝试用f in fDICT替换它

相关问题 更多 >