小编典典

不能腌制defaultdict

python

我有一个defaultdict看起来像这样:

dict1 = defaultdict(lambda: defaultdict(int))

问题是,我不能使用cPickle腌制它。我在这里找到的解决方案之一是使用模块级函数而不是lambda。我的问题是,什么是模块级功能?如何在cPickle中使用字典?


阅读 207

收藏
2020-12-20

共1个答案

小编典典

除了Martijn的解释之外:

模块级函数是在模块级定义的函数,这意味着它不是类的实例方法,它不嵌套在另一个函数中,并且它是带有名称的“真实”函数,而不是lambda函数。

因此,要腌制您的代码defaultdict,请使用模块级功能(而不是lambda函数)创建它:

def dd():
    return defaultdict(int)

dict1 = defaultdict(dd) # dd is a module-level function

比你可以腌的多

tmp = pickle.dumps(dict1) # no exception
new = pickle.loads(tmp)
2020-12-20