首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

Python 3.6 要让所有字典有序?

  •  
  •   guyskk · 2016-10-03 13:35:57 +08:00 via Android · 4535 次点击
    这是一个创建于 1163 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://www.reddit.com/r/Python/comments/55iqpo/guido_on_dicts_in_python_36/

    https://mail.python.org/pipermail/python-dev/2016-September/146348.html

    I've been asked about this. Here's my opinion on the letter of the law in 3.6:

    • keyword args are ordered
    • the namespace passed to a metaclass is ordered by definition order
    • ditto for the class dict

    A compliant implementation may ensure the above three requirements either by making all dicts ordered, or by providing a custom dict subclass (e.g. OrderedDict) in those three cases.

    I'd like to handwave on the ordering of all other dicts. Yes, in CPython 3.6 and in PyPy they are all ordered, but it's an implementation detail. I don't want to force all other implementations to follow suit. I also don't want too many people start depending on this, since their code will break in 3.5. (Code that needs to depend on the ordering of keyword args or class attributes should be relatively uncommon; but people will start to depend on the ordering of all dicts all too easily. I want to remind them that they are taking a risk, and their code won't be backwards compatible.)

    --Guido

    16 回复  |  直到 2016-10-04 22:14:23 +08:00
        1
    terence4444   2016-10-03 13:40:26 +08:00 via iPhone
    记得有一个 OrderedDict 可以用…
        2
    Patrick95   2016-10-03 13:44:19 +08:00 via iPhone
    我觉得有序挺好的,无序也没什么影响。
        3
    tabris17   2016-10-03 13:54:15 +08:00
    早就该这么做了
        4
    guyskk   2016-10-03 13:56:12 +08:00 via Android
    @Patrick95 感觉这样会导致性能下降,这种字典结构在大多数语言里面都是无序的
        5
    tairan2006   2016-10-03 14:02:01 +08:00 via Android
    默认实现由哈希表转为红黑树(或跳表)吧,性能当然有影响
        6
    kkzxak47   2016-10-03 14:08:13 +08:00 via Android   ♥ 1
    @guyskk 我记得有序是一个实现方式改变带来的副产品,不是刻意追求
        7
    kkzxak47   2016-10-03 14:11:04 +08:00 via Android
        8
    guyskk   2016-10-03 14:51:27 +08:00 via Android
        9
    doubleflower   2016-10-03 15:42:14 +08:00
    这功能挺人性化的,连打印调试都更好读了,而且性能损失很小可以忽略。
        10
    skydiver   2016-10-03 15:44:04 +08:00 via Android
    终于和最好的语言 PHP 看齐了
        11
    awanabe   2016-10-03 17:22:07 +08:00
    @terence4444 OrderedDict 里面是维护了一个链表, 如果数据量大,相当于 size 是两倍... 还是挺吓人的🎺
        12
    cortexm3   2016-10-03 20:10:58 +08:00
    @guyskk +1
        13
    zonghua   2016-10-03 22:29:35 +08:00
    性能再一次降低了
        14
    tabris17   2016-10-03 22:31:46 +08:00
    @tairan2006 怎么可能。无非是哈希表的 bucket 加上链表而已,多维护一个链表罢了,对性能影响微乎其微
        15
    jiang42   2016-10-03 22:33:56 +08:00 via iPhone
    @zonghua 我的理解,性能不会降低,内存占用减少

    具体参见 @kkzxak47 贴出的邮件

    Python 其实一直致力于性能的提升, e.g. os.scandir
        16
    ruoyu0088   2016-10-04 22:14:23 +08:00   ♥ 1
    这里有性能比较:
    内存可以节省 20%左右。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4241 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 08:55 · PVG 16:55 · LAX 00:55 · JFK 03:55
    ♥ Do have faith in what you're doing.