python - 不能 pickle 默认字典

标签 python pickle defaultdict

我有一个如下所示的默认字典:

dict1 = defaultdict(lambda: defaultdict(int))

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

最佳答案

除了Martijn's explanation :

模块级函数是在模块级定义的函数,这意味着它不是一个类的实例方法,它没有嵌套在另一个函数中,它是一个有名字的“真实”函数,而不是一个 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/

相关文章:

python - DefaultDict 的替代品

python - 如何按相同字段合并字典列表并在此过程中对另一个字段求​​和?

python - 如何将 pandas 数据框转换为其中一个列值用作键的 defaultdict (class, list)?

python - 如何在 QTabWidget 选项卡上设置鼠标光标

python - 使用Python的Kivy更改HomeScreen和LockScreen壁纸

python - 在 Jenkins 作业中构建之前调用 python 脚本

python - 如何破译这个 cPickle 错误?

python - Python内存管理见解— id()

python - 我怎样才能 pickle 泡沫结果?

python - 为什么 pickle 比 np.save 花费的时间长得多?