TypeError:无法腌制dict_items对象

问题描述 投票:3回答:1

为什么

pickle.dumps({}.items())

在Python 3.5.2中失败,但在Python 2.7.12中没有TypeError: can't pickle dict_items objects

“用字典腌制]

pickle.dumps({})

在两个Python版本中都适用(并且在Python 2.7.12中提供与上述命令相同的输出)。

python-3.x serialization python-2.x dill
1个回答
3
投票

因为在python 2.7中.items()返回的只是listtuples可拾取的。

在python 3.x中,它返回dict_items对象(在python 2中不存在),不是可拾取的(但由于它不生成列表,所以速度更快,它大致相当于python 2.xiteritems()])。

但是您可以强制列表转换以模拟python 2.x行为:

pickle.dumps(list(d.items()))
© www.soinside.com 2019 - 2024. All rights reserved.