为什么字典类型变量内容不能被腌制?

时间:2019-09-18 20:21:12

标签: python pickle numba

我必须使用numba的字典(numba.typed.typeddict.Dict)类型来定义字典:

@njit
def init_numba_dict():
    x = numpy.array([0], dtype=numpy.int32)
    return {"01234-5": x[0], "0-1": x[0]}

myDict = init_numba_dict()

现在我需要将其保存到文件中。我认为以下代码可以工作:

import pickle
filehandler = open("file.dat", 'wb') 
pickle.dump(myDict , filehandler, pickle.HIGHEST_PROTOCOL)
filehandler.close()

我收到此错误:“ TypeError:无法腌制_nrt_python._MemInfo对象”

有任何提示吗?如何将numba.typed.typeddict.Dict的内容保存和恢复到文件?

1 个答案:

答案 0 :(得分:0)

很好的问题。我只是遇到了同样的错误并找到了解决方案。发生错误是因为numba(C语言)返回了一个指针,而不是数组或字典项之类的python之类的值。另一方面,泡菜要求一个python对象作为输入。因此,您要做的就是在使用dict()函数对其进行腌制之前,将numba dict更改为python dict对象。

import pickle
filehandler = open("file.dat", 'wb') 
pickle.dump(dict(myDict), filehandler, pickle.HIGHEST_PROTOCOL)
filehandler.close()