我有一個需要高效解壓縮到字典的對象列表。列表中有超過2,000,000個對象。該操作完成超過1.5個小時。我想知道這是否可以更有效地完成。 列表中的對象基於此類。Python:將對象列表解壓到字典
class ResObj:
def __init__(self, index, result):
self.loc = index ### This is the location, where the values should go in the final result dictionary
self.res = result ### This is a dictionary that has values for this location.
self.loc = 2
self.res = {'value1':5.4, 'value2':2.3, 'valuen':{'sub_value1':4.5, 'sub_value2':3.4, 'sub_value3':7.6}}
目前我使用此方法來執行此操作。
def make_final_result(list_of_results):
no_sub_result_variables = ['value1', 'value2']
sub_result_variables = ['valuen']
sub_value_variables = ['sub_value1', 'sub_value3', 'sub_value3']
final_result = {}
num_of_results = len(list_of_results)
for var in no_sub_result_variables:
final_result[var] = numpy.zeros(num_of_results)
for var in sub_result_variables:
final_result[var] = {sub_var:numpy.zeros(num_of_results) for sub_var in sub_value_variables}
for obj in list_of_results:
i = obj.loc
result = obj.res
for var in no_sub_result_variables:
final_result[var][i] = result[var]
for var in sub_result_variables:
for name in sub_value_variables:
try:
final_result[var][name][i] = result[var][name]
except KeyError as e:
##TODO Add a debug check
pass
我一直在使用multiprocessing.Manager()。字典和經理試圖()。數組()使用並行這一點,但是,我只能得到2個處理工作(儘管,我手動設置進程到#個CPU = 24)。 你能幫我使用更快的方法來提高性能。 謝謝。
很多這個看起來不像是很好的使用數據結構或者特別有效的對象初始化給我,但是很難說出你從哪裏開始。你能舉例輸入和輸出嗎? –
請發佈一個簡短的自包含的'.py'文件,它需要超過1.5小時才能在您的機器上運行:http://sscce.org/ – pts
您似乎有嵌套循環:'for var in no_sub_result_variables:'和對於sub_result_variables中的var:'。你真的想在這裏有嵌套循環嗎?如果是,請將內部循環變量重命名爲「var2」以進行說明。 – pts