事前に計算されたデータ (つまり、多くのルックアップ) から非常に大きな辞書を作成するコードがあります。4 つの整数タプルをキーとして使用し、タプルのリストをアイテムとして使用します。次に、このディクショナリは、各キーに追加された関数で更新されます (各項目を後の段階でソートできるようにするため)。上記のプロセスは何千回も繰り返されますが、元の (ベース) 辞書は同じままです。元のディクショナリは、更新とほぼ同じサイズです (ただし、異なります)。
deepcopy
元の辞書を更新の「土台」として使うため、andを使ってみました。コピーは、ディクショナリ全体をゼロから再構築するよりも桁違いに遅いことが判明しました。
これが不明確な場合は、おそらく次の単純化されたコードがより理にかなっています。
print timeit.timeit('''
for iteration in xrange(10):
base_dictionary = {(month, day, hour): [(value, 'some_data_name' + str(value)) for value in xrange(10)]
for month in xrange(5)
for day in xrange(5)
for hour in xrange(5)
}
for valuenumber in xrange(10):
for id_set in base_dictionary:
base_dictionary[id_set].append((valuenumber, 'some_data_name' + str(valuenumber)))
'''
,
'''
''', number=100)
結果: 1.30800844321 秒
print timeit.timeit('''
for iteration in xrange(10):
new_dictionary = deepcopy(base_dictionary)
for valuenumber in xrange(10):
for id_set in new_dictionary:
new_dictionary[id_set].append((valuenumber, 'some_data_name' + str(valuenumber)))
'''
,
'''
from copy import deepcopy
base_dictionary = {(month, day, hour): [(value, 'some_data_name' + str(value)) for value in xrange(10)]
for month in xrange(5)
for day in xrange(5)
for hour in xrange(5)
}
''', number=100)
結果: 13.8005886255 秒
イテレーションを実行するたびに同じ辞書を再構築するのは非常にもったいないです。このプロセスを加速する方法はありますか?