the5fire

关注Python、Django、Vim、Linux、Web开发、团队管理和互联网--Life is short, we need Python.


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

作者:the5fire | 标签:       | 发布:2017-06-05 8:49 p.m. | 阅读量: 7332, 6370

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

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

代码如下:

# 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下分别运行:

➜  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'])

参考:

- from the5fire.com
----EOF-----

微信公众号:Python程序员杂谈


其他分类: