python - 高效的字典搜索?

标签 python search optimization dictionary

我有一个关于在 Python 中搜索 large 字典的效率的问题。我正在阅读一个以逗号分隔的大文件,并从每一行获取一个键和值。如果我的键已经在字典中,我将值添加到字典中列出的值,如果键不存在于字典中,我只需添加值。以前我用这个:

if key in data_dict.keys():
    add values
else:
    data_dict[key] = value

这开始很快,但随着字典的增长,它变得越来越慢,以至于我根本无法使用它。我将在字典中搜索键的方式更改为:

try:
    # This will fail if key not present
    data_dict[keyStr] = input_data[keyStr] + load_val
except:
    data_dict[keyStr] = load_val

这速度无限快,可以在 3 秒内读取/写入超过 350,000 行代码。

我的问题是为什么 if key in data_dict.keys(): 命令比调用 try: data_dict[keyStr] 花费的时间要长得多?为什么 Python 在字典中搜索键时不使用 try 语句?

最佳答案

问题在于,对于每个测试,您都会使用 .keys() 生成一个新的键列表。随着 key 列表变长,所需时间也会增加。还有as noted by dckrooney ,对键的搜索变成线性的,而不是利用字典的哈希表结构。

替换为:

if key in data_dict:

关于python - 高效的字典搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19103785/

相关文章:

sql - 如何找出 spid 状态暂停的原因? spid 正在等待什么资源?

c# - 为什么 C# 不使用结构参数内联函数?

java - JVM JIT 能否专门化子类中的非覆盖方法?

python - Pandas json_normalize 返回 KeyError

python - 如何使用 MSVC-14.0 为 x64 构建 boost 1_59_0

python - 如何使用 Spidermon 监控特定的蜘蛛?

python - 如何改进内存密集型Python脚本?

xml - R:将节点插入特定位置的xml树

java - HTML 搜索验证 android

php - 使用 MySQL 和 PHP 进行特定模式搜索 - 应该怎么做?