日常中如何解决 Python 中字典是无序这一问题的

2021-05-14 15:22:25 +08:00
 alittlecode
collections 的 OrderedDict 可以解决无序问题,但是他是按照你赋值的顺序实现的,比如我现在有一个 dict
使用 OrderedDict 的话
from collections import OrderedDict
a = OrderedDict()
a["aaa"] = 1
a["bbb"] = 2
这样情况下得出的是一个有序的字典 dict a = {"aaa": 1, "bbb": 2}
如果我原本就有一个 dict b = {"ccc": 3, "ddd": 4}
在不遍历重新赋值的情况下怎样让成为一个有序的字典
3636 次点击
所在节点    Python
35 条回复
Trim21
2021-05-14 17:55:09 +08:00
@ch2 dict 现在保证是有序的
BBCCBB
2021-05-14 18:00:36 +08:00
@Trim21 保证有序也不对.. python3.5 还是 3.6+. 只是恰好实现的 dict 是有序的, 官方好像说不要依赖这个特性?? 因为他们不保证后续依然有序.
Trim21
2021-05-14 18:03:58 +08:00
@BBCCBB
3.6cpython 的实现是有序的

然后 3.7 加入了语言特性
renmu123
2021-05-14 18:06:22 +08:00
@BBCCBB 我记得后续的一个大版本已经确定这个 feature 了。
你可以用[{}]进行遍历
Trim21
2021-05-14 18:12:02 +08:00
我突然明白楼主的问题了,楼主说的是 dict 字面量的排序问题吧,这个好像没有保证过是有序的,保证的都是分别设置 key 的顺序。
Trim21
2021-05-14 18:13:00 +08:00
应该只能 OrderedDict([(key,value),])这样了
BBCCBB
2021-05-14 18:15:04 +08:00
@Trim21
@renmu123
学到了.. 要是有个链接更好了. 不是专业 python 搜这个有点恼火 🐶
Trim21
2021-05-14 18:18:16 +08:00
@BBCCBB 是 guido 在邮件列表里说的…没有个 pep
renmu123
2021-05-14 19:03:06 +08:00
https://docs.python.org/zh-cn/3/library/stdtypes.html#mapping-types-dict

在 3.7 版更改: 字典顺序会确保为插入顺序。 此行为是自 3.6 版开始的 CPython 实现细节。
seeleling
2021-05-14 19:15:01 +08:00
升级 Python
francis59
2021-05-14 22:36:30 +08:00
cherbim
2021-05-15 12:14:02 +08:00
不好意思,我的 Python 字典是有序的
BBCCBB
2021-05-15 13:44:52 +08:00
@Trim21
@renmu123
那 OrderedDict 这个类在新版本里除了兼容老代码. 基本就没啥用了哈
renmu123
2021-05-15 15:44:53 +08:00
@BBCCBB 还可以用来对字典顺序排序
no1xsyzy
2021-05-19 14:12:36 +08:00
@BBCCBB OrderedDict 可以手动调序,但操作极复杂,不推荐。

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

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

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

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

© 2021 V2EX