我有一个代码,涉及根据预先计算的数据(即进行多次查找)构建一个非常大的字典。它使用四整数元组作为键,使用元组列表作为项目。然后使用每个键的附加函数更新该字典(以便可以在稍后阶段对每个项目进行排序)。上述过程重复数千次,但原始(基础)字典保持不变。原始词典的大小与更新后的词典的大小大致相同(但有所不同)。
我尝试使用deepcopy
并使用原始字典作为更新的“基础”。事实证明,复制比从头开始重建整个字典要慢一个数量级。
如果这还不清楚,也许这个简化的代码会更有意义:
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 秒
每次运行迭代时都重建相同的字典感觉非常浪费。有没有办法加速这个过程?
最佳答案
您需要介于浅复制和深复制之间的东西。元组不需要复制,因为它们是不可变的。
newdict = {k, v[:] for k, v in olddict.iteritems()}
关于python - 如果数据冗余,重用预建字典的有效方法是什么?深拷贝太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13685445/