繁体   English   中英

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

[英](surprisingly) python dict “has_key” faster than “in”

根据流行的信息以及在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”即使在很小的文件上也使代码快5万倍。 这真是令人莫名其妙-有人知道发生了什么吗?

f in FDICT.keys()f in FDICT ,而不是f in FDICT.keys() 使用keys建立所有keys的列表,并逐一遍历,而f in FDICT使用基于哈希的高效查找。

if f in FDICT.keys()

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

尝试f in fDICT其替换为f in fDICT

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

无论如何,我听说传统的优化方法是假设键在字典中,如果没有,就捕获KeyError

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM