V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
dslwind
V2EX  ›  Python

Python 新手问一个关于 dictionary comprehension 的问题

  •  
  •   dslwind · 2016-11-28 19:08:33 +08:00 · 1913 次点击
    这是一个创建于 2924 天前的主题,其中的信息可能已经有所发展或是发生改变。
    >>> d = {(x, x+1): x for x in range(10)}
    >>> d
    {(0, 1): 0, (1, 2): 1, (6, 7): 6, (5, 6): 5, (7, 8): 7, (8, 9): 8, (4, 5): 4, (2, 3): 2, (9, 10): 9, (3, 4): 3}
    

    问题是, d 为什么是按照上面这种顺序生成的,为什么不是

    {(0, 1): 0, (1, 2): 1, (2, 3): 2, (3, 4): 3, (4, 5): 4, (5, 6): 5, (6, 7): 6, (7, 8): 7, (8, 9): 8, (9, 10): 9}
    
    7 条回复    2016-11-29 01:44:54 +08:00
    casparchen
        1
    casparchen  
       2016-11-28 19:15:50 +08:00
    字典非有序
    dslwind
        2
    dslwind  
    OP
       2016-11-28 19:22:07 +08:00
    @casparchen 这个我可以理解,但是

    >>> d = {x:x for x in range(10)}
    >>> d
    {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}

    这里是有序的,为什么 key 是 tuple 的时候就无序了呢?
    bigtan
        3
    bigtan  
       2016-11-28 19:28:27 +08:00
    @dslwind 这里也是无序的,你看到的顺序并不能说明什么,你在使用时,他不保证就是这个顺序
    huangfs
        4
    huangfs  
       2016-11-28 19:29:06 +08:00
    @dslwind 你确定这样就是有序的?
    dtfm
        5
    dtfm  
       2016-11-28 19:44:17 +08:00 via Android
    要有序字典可以

    from collections import OrderedDict

    按照装入的顺序排列
    SuperMild
        6
    SuperMild  
       2016-11-28 19:47:14 +08:00 via iPad   ❤️ 1
    字典不保证有序是标准。但任何语言标准都有具体实现,在实现时可能恰好有序,也可能恰好无序,但这些是语言背后的实现,我们语言的用户不用理会,现在恰好有序的,以后也有可能修改成无序。因此,标准说了无序,我们就要一律把它当作无序来处理。
    myjiayan
        7
    myjiayan  
       2016-11-29 01:44:54 +08:00
    别着急, python3.6+就会默认所有字典有序!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1917 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:36 · PVG 08:36 · LAX 16:36 · JFK 19:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.