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 秒かかりますが、数千行の入力の後、0.5 秒、次に 1 秒、そしてそれ以上かかるようになります。問題は、入力ファイルが非常に大きいため、最終的にこの関数を使用すると、プログラム全体を実行するのに少なくとも丸 2 日かかることです。

上記の関数をより速く実行できるように書き直す方法はありますか? このプログラムを定期的に実行できるようにしたいので、実際よりも速く実行したいと思っています。

助けてくれてありがとう!

4

2 に答える 2

4

さて、すぐに、を取り除きenumerateます。また、2 番目の for ループは何もしません。それも取り除きます:

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

上記の関数は、古い関数が行うすべてのことを行う必要がありますが、はるかに高速になります。

于 2013-08-23T16:53:31.217 に答える
4

iteritems辞書項目をより効率的に反復処理するために使用できます(Python 2.x の場合):

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

Python 3.xで@Bakuriuが観察したように:

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

Python 3.x では、Python 2.xitems()と同様にイテレータが提供されるためです。iteritems()

于 2013-08-23T17:03:42.167 に答える