【发布时间】:2013-10-06 21:08:31
【问题描述】:
我有一个关于在 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 语句?
【问题讨论】:
-
一般来说,您不想捕获所有异常,而只想捕获您“期望”并在发现时处理的异常。在这里,例如,使用:
except KeyError: ... -
您的示例代码令人困惑。在第一个 sn-p 中,您正在检查
key是否在data_dict中,但在第二个中,唯一会给您一个KeyError异常的事情是如果key不在 @987654331 中@。这使得很难提供完整的答案......
标签: python search optimization dictionary