IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    the5fire发表于 2017-06-05 12:50:47
    love 0

    一则来自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'])

    参考:

    • https://docs.python.org/3/library/stdtypes.html#dict-views


沪ICP备19023445号-2号
友情链接