随着字典变得太大,Python函数需要太长时间

时间:2013-08-23 16:50:48

标签: python performance dictionary

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秒才能运行,但是在几千行输入之后,它开始需要半秒钟,然后是一整秒,然后是更长时间。问题是我的输入文件太大,最终这个函数使整个程序至少需要两整天才能运行。

有没有办法重新编写上面的函数,以便它运行得更快?我希望能够定期运行这个程序,所以我真的希望它运行得比它快。

非常感谢您提前寻求帮助!

2 个答案:

答案 0 :(得分:4)

好吧,直接蝙蝠,摆脱enumerate。而且,你的第二个for-loop什么也没做。摆脱它:

def assign_ID(dic, id):
    for key in dic:
        if id in dic[key]:
            return key

上述功能应该完成旧功能所做的一切,只会更快。

答案 1 :(得分:4)

您可以使用iteritems更有效地迭代字典项(在Python 2.x中):

for k,v in dic.iteritems():
    if id in v:
        return k
正如@Bakuriu在Python 3.x中所观察到的那样:

for k,v in dic.items():
    if id in v:
        return k

因为在Python 3.x items()中将提供迭代器,类似于Python 2.x中的iteritems()