【发布时间】:2013-08-23 16:50:47
【问题描述】:
def assign_ID(dic,id):
for key, value in enumerate(dic):
for elem in range(value):
if id in dic[value]:
return value
我上面的函数做了我想做的事——但问题是随着字典 dic 在我的程序的主要部分变得越来越大,我的“assign_ID”函数花费的时间太长。最初这个函数需要大约 1/100 秒的时间来运行,但是在几千行输入之后,它开始需要半秒,然后是一整秒,然后更长。问题是我的输入文件太大了,最终这个函数使整个程序至少需要两天时间才能运行。
有没有办法重写上面的函数,让它运行得更快?我希望能够定期运行这个程序,所以我真的希望它比它运行得更快。
非常感谢您的任何帮助!
【问题讨论】:
-
我不认为
enumerate(dic)做你认为它做的事。你能描述一下你的数据结构和你想要完成的任务吗? -
当然,所以“dic”是一个默认字典(docs.python.org/release/2.5.2/lib/defaultdict-examples.html)。我的目标是查看之前是否已将相关 id 分配给一个键。我们一直遇到各种导致不同 id 的问题,所以我想彻底检查整个字典,看看值是否出现在其他地方。你会这样想吗?
-
defaultdict 的值是多少?如果它们是列表,并且列表变得很大,那么每个
in运算符将花费大量时间。您应该考虑改用sets。 -
呃...你有一个 O(n) 步骤与
for elem in range(value)几乎什么都不做。 -
如果您希望该值在整个数据集中只出现一次,那么列表字典是错误的数据结构。
标签: python performance dictionary