私は整数のキーとリストの値を持つ辞書を含むクラスを構築しています。このディクショナリに値を追加することは本当のボトルネックに思えますし、自分のコードをスピードアップする方法があるかどうかは疑問でした。Python:リストの値で辞書に追加する最適な方法
class myClass():
def __init__(self):
self.d = defaultdict(list)
def addValue(self, index, value):
self.d[index].append(value)
これは本当にこれを行う最適な方法ですか?私は本当に値の順序を気にしないので、より適切なデータ構造があり、そこにはより速い追加があります。そして、もう一度、 'append'が主な問題ではないようです。なぜなら、単に空のリストに追加すれば、コードはずっと速くなるからです。私はそれが時間のほとんどを占める以前に格納されたリストの読み込みだと思いますか?
私は(私は私のオリジナルのポスト、そのために私は謝罪では他に主張が)問題は辞書ではありませんが、リストはappendであることが分かりました。この問題は、Pythonのガベージコレクタのバグが原因で発生しています。これについては、 this other questionでよく説明されています。すべての値を追加してから再度有効にする前にgcを無効にすると、プロセスが大幅にスピードアップします!
リストにアイテムを追加したり、オブジェクトやディクショナリから値を取得するのに時間がかかりません。プログラムをスピードアップするためには、ランダムなコードを変更するのではなく、プロファイリングによってボトルネックを見つけます。 –
新しいキーに値を追加するよりも、既存のキーに項目をマッピングする方がはるかに高速ですか? –
私はちょうどその問題がdictではなく、リストに追加されていることを知った(私は元の投稿では別に主張したが、私はそれを謝る)。それから私は私の質問への答えをhttp://stackoverflow.com/questions/2473783/is-there-a-way-to-circumvent-python-list-append-becoming-progressively-slowerで見つけました。私はこのサイトを初めて利用しているので、この場合の標準的な手順は何か分かりません。オリジナルの投稿を削除する必要がありますか?または上記の詳細を追加し、投稿に答えますか? – niefpaarschoenen