(意外地)Python字典“has_key”比“in”更快

0 投票
3 回答
665 浏览
提问于 2025-04-18 18:54

根据网上的热门信息和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 则是用一种更快的方法来查找。

撰写回答