我有一个defaultdict看起来像这样:
dict1 = defaultdict(lambda: defaultdict(int))
问题是,我不能使用cPickle腌制它。我在这里找到的解决方案之一是使用模块级函数而不是lambda。我的问题是,什么是模块级功能?如何在cPickle中使用字典?
除了Martijn的解释之外:
模块级函数是在模块级定义的函数,这意味着它不是类的实例方法,它不嵌套在另一个函数中,并且它是带有名称的“真实”函数,而不是lambda函数。
因此,要腌制您的代码defaultdict,请使用模块级功能(而不是lambda函数)创建它:
defaultdict
def dd(): return defaultdict(int) dict1 = defaultdict(dd) # dd is a module-level function
比你可以腌的多
tmp = pickle.dumps(dict1) # no exception new = pickle.loads(tmp)