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

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

非常感谢您的帮助!

4

2 回答 2

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.xitems()中将给出一个迭代器,类似于iteritems()在 Python 2.x 中。

于 2013-08-23T17:03:42.167 回答
4

好吧,直截了当,摆脱enumerate. 此外,您的第二个 for 循环什么也不做。摆脱它:

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

上面的函数应该做你旧函数所做的一切,只是它会快得多。

于 2013-08-23T16:53:31.217 回答