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

2016-11-28 19:08:33 +08:00
 dslwind
>>> 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}
1935 次点击
所在节点    Python
7 条回复
casparchen
2016-11-28 19:15:50 +08:00
字典非有序
dslwind
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
2016-11-28 19:28:27 +08:00
@dslwind 这里也是无序的,你看到的顺序并不能说明什么,你在使用时,他不保证就是这个顺序
huangfs
2016-11-28 19:29:06 +08:00
@dslwind 你确定这样就是有序的?
dtfm
2016-11-28 19:44:17 +08:00
要有序字典可以

from collections import OrderedDict

按照装入的顺序排列
SuperMild
2016-11-28 19:47:14 +08:00
字典不保证有序是标准。但任何语言标准都有具体实现,在实现时可能恰好有序,也可能恰好无序,但这些是语言背后的实现,我们语言的用户不用理会,现在恰好有序的,以后也有可能修改成无序。因此,标准说了无序,我们就要一律把它当作无序来处理。
myjiayan
2016-11-29 01:44:54 +08:00
别着急, python3.6+就会默认所有字典有序!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/323917

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX