我有一个如下所示的默认字典:
dict1 = defaultdict(lambda: defaultdict(int))
问题是,我不能用 cPickle pickle 它。我在这里找到的解决方案之一是使用模块级函数而不是 lambda。我的问题是,什么是模块级功能?如何将字典与 cPickle 一起使用?
最佳答案
模块级函数是在模块级定义的函数,这意味着它不是一个类的实例方法,它没有嵌套在另一个函数中,它是一个有名字的“真实”函数,而不是一个 lambda 函数。
因此,要 pickle 您的 defaultdict
,请使用模块级函数而不是 lambda 函数来创建它:
def dd():
return defaultdict(int)
dict1 = defaultdict(dd) # dd is a module-level function
你可以 pickle 它
tmp = pickle.dumps(dict1) # no exception
new = pickle.loads(tmp)
关于python - 不能 pickle 默认字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16439301/