python2,dict 对象的 keys()方法获得的键列表中的元素顺序是固定的还是随机的? 用少量数据试了下,看上去好像是固定且有规律的(升序?) dict.values()是按 keys()结果的顺序输出的?
![]() | 1 imn1 2020-01-02 09:05:57 +08:00 3.5 后是依次加入的顺序 d['b']=1 d['a']=2 顺序就是 b a |
![]() | 2 sikariba 2020-01-02 09:11:02 +08:00 我怎么记得是 3.7,PyPy 不记得,CPython 是 3.6 实现的,然后是到 3.7 才推广到全语言的 |
3 lihongjie0209 2020-01-02 09:16:20 +08:00 Python 不知道, 但是在 Java 中, 为了避免客户依赖这种特性, 哪怕是内部有序的, 返回给你的时候都会打乱. 既然使用 hash 表, 就不要再考虑顺序了 |
![]() | 4 jdhao 2020-01-02 09:18:33 +08:00 via Android 随机的,需要顺序,用 ordered dict |
![]() | 5 love 2020-01-02 09:31:26 +08:00 via Android @lihongjie0209 hash 顺序挺有用,只要库明确支持就可以放心用,比如我大 js 明确可以依赖 key 顺序 |
![]() | 6 drawstar 2020-01-02 09:33:56 +08:00 我记得 python 中好像是随机的 |
![]() | 7 josephpei 2020-01-02 09:36:04 +08:00 Python 3.7+ https://docs.python.org/3.7/whatsnew/3.7.html In Python 3.7.0 the insertion-order preservation nature of dict objects has been declared to be an official part of the Python language spec. Therefore, you can depend on it. |
![]() | 8 josephpei 2020-01-02 09:38:19 +08:00 go 之前版本是键列表是有序的,后来为了避免大家依赖这个,新版本改成无序的了 |
![]() | 9 hjq98765 2020-01-02 10:22:36 +08:00 不是随机的,感觉是排过序的: >>> {1:2,3:4}.keys() >>> [1, 3] -------------------- >>> {3:2,1:4}.keys() >>> [1, 3] |
![]() | 10 tkmiles 2020-01-02 10:24:23 +08:00 看版本, 3.6 之前是"无序"的, 也就是 hash 顺序 3.6 之后则是按 key 插入顺序 |
![]() | 11 axer0912 2020-01-02 10:30:32 +08:00 via Android dart 有一个叫 LinkedHashMap,那是有顺序的 |
12 tfdetang 2020-01-02 10:30:55 +08:00 从 python3.6 起就是有序的了,之前都不是有序的 |
13 fank99 2020-01-02 10:53:21 +08:00 虽然有 order dict,但内部是有序的。 如同上面老哥所述,在 3.x ( x 是几我给忘了)后的版本是有序的 |
![]() | 14 littlewey 2020-01-02 10:54:37 +08:00 建议你把自己的问题变成关键词,Google 一下。 python dict keys ordering |
![]() | 16 nongmei 2020-01-02 11:56:55 +08:00 记得 python 的字典是哈希存储,有顺序,但不是你插入的顺序 |
![]() | 17 crella 2020-01-02 14:05:18 +08:00 via Android ruby2.6.4 是按插入的顺序 |
![]() | 18 crella 2020-01-02 14:07:10 +08:00 via Android 2.5.7 也是。不过为什么会出现需要 hash 的键自动排序的情况呢? |
19 oldbird OP 在 py2.7 试了输出任意次 keys(),每次输出的列表都是一样的,可能应该这样理解:keys()结果只有一种固定的排列情况,这个固定的序列中元素的顺序是任意的。 |