前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不能 pickle 的 OrderedDict.keys() 对象(Py2-bt-py3)

不能 pickle 的 OrderedDict.keys() 对象(Py2-bt-py3)

作者头像
the5fire
发布2019-03-01 14:06:24
6180
发布2019-03-01 14:06:24
举报

一则来自django-redis的报错:TypeError: can't pickle odict_keys objects

迁移到Python3时遇到的一个问题,Py3中的OrderedDict.keys()返回的是一个对象:odict_keys。可以迭代的对象,但是不支持index操作,和切片操作。并且不能pickle。所以我就遇到这个坑了。不过它多了一个更新keys的功能,可以看最后的参考链接。

代码如下:

代码语言:javascript
复制
# coding:utf-8
from collections import OrderedDict

od = OrderedDict({"a": 1, "b": 2})
print(od.keys(), type(od.keys()))

od_keys = od.keys()
od.update({"c": 'the5fire'})
print(od_keys)

python2.7和Python3.6下分别运行:

代码语言:javascript
复制
➜  tmp python2.7 t_py3.py
(['a', 'b'], <type 'list'>)
['a', 'b']
➜  tmp python3.6 t_py3.py
odict_keys(['a', 'b']) <class 'odict_keys'>
odict_keys(['a', 'b', 'c'])

参考:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档