V2EX = way to explore V2EX 是一个关于分享和探索的地方
Sign Up Now For Existing Member Sign In
推荐学习书目 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
This topic created in 1812 days ago, the information mentioned may be changed or developed.
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}
在不遍历重新赋值的情况下怎样让成为一个有序的字典
使用 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}
在不遍历重新赋值的情况下怎样让成为一个有序的字典
2 secsilm May 14, 2021 via Android 升级 Python 程序 |
3 iyaozhen May 14, 2021 不遍历好像不行 话说你为啥需要有序? 而且「有序」如何定义? key 有序?按什么排序,顺序、倒序?还是按 value ? |
4 jsutfun May 14, 2021 如果按 key 的话,python3 已经是有序的了呀 |
5 allan888 May 14, 2021 不用别的数据结构也行: from collections import OrderedDict d = {"ddd": 2, "ccc": 1} sorted_d = OrderedDict() l = d.keys() l.sort() for k in l: sorted_d[k] = d[k] |
6 alittlecode OP @iyaozhen 只是想让他按照我写的顺序显示比如 dict b 只是想在遍历是先出现 ccc 再出现 ddd |
7 alittlecode OP @allan888 不是为了排序只是为了按照我写的顺序展示根据 key 排序可以使用 my_data = {'Python': 20, 'Swift':32, 'Kotlin': 43, 'Go': 25} # 创建基于 key 排序的 OrderedDict d1 = OrderedDict(sorted(my_data.items(), key=lambda t: t[0])) # 创建基于 value 排序的 OrderedDict d2 = OrderedDict(sorted(my_data.items(), key=lambda t: t[1])) |
8 alittlecode OP 突然想到一个问题这个除非你提前设计好这个字段是怎样的,不然你就算写好一个字典,只是 ide 让你看到是这个顺序,保存到内存就完全变了,你看到的就是个假象,只是你看到的 |
9 iyaozhen May 14, 2021 via Android 你写的顺序这个计算机不好理解吧 要不用 list ? |
10 alittlecode OP @iyaozhen 再维护一个 list 把所有的 key 写进去 |
11 abersheeran May 14, 2021 升级 Python 版本就行了。 |
12 aloxaf May 14, 2021 Python 3.6 中 dict 就已经有序了 而 3.7 起 dict 保持插入顺序成为了正式的 feature 所以,你该升级 Python 了…… |
13 codists May 14, 2021 没搞懂为什么那么多人说“升级 Python”或者“Python3.6 就已经有序了“,这个有序说的是插入的有序。而提问者的问题是”键按字母顺序排序或者按值排序“吧? |
15 llsquaer May 14, 2021 dict 现在已经有序了..但是有一次我发现 , 用 pyqt 发信号传 dict 数据..,还是出现了无序的问题..解决的方法是,转为元组,然后再 zip() 转为 dict |
16 chaleaoch May 14, 2021 python3. 6 7 8 忘记是哪个版本 已经开始有序 另外 OrderedDict 考虑一下. |
17 chaleaoch May 14, 2021 楼主忽略 我没看正文. |
18 ch2 May 14, 2021 字典本来就是不保证有序的 |
19 weyou May 14, 2021 via Android 二楼已经给出方面答案了啊,要按照写的顺序就是升到 3.6 |
20 xylophone21 May 14, 2021 HashMap 是“无序”的,它的“序”靠的是 Hash 值,如果要“有序”可以用红黑树之类结构,但代价是你只能用你排序的那个字段做快速查找、插入了。 如果即需要用 Key 快速查找、插入,又希望用别的参数来做“序”那么可能你需要一个符合的数据结构。 |
22 BBCCBB May 14, 2021 @Trim21 保证有序也不对.. python3.5 还是 3.6+. 只是恰好实现的 dict 是有序的, 官方好像说不要依赖这个特性?? 因为他们不保证后续依然有序. |
25 Trim21 May 14, 2021 via Android 我突然明白楼主的问题了,楼主说的是 dict 字面量的排序问题吧,这个好像没有保证过是有序的,保证的都是分别设置 key 的顺序。 |
26 Trim21 May 14, 2021 via Android 应该只能 OrderedDict([(key,value),])这样了 |
29 renmu123 May 14, 2021 https://docs.python.org/zh-cn/3/library/stdtypes.html#mapping-types-dict 在 3.7 版更改: 字典顺序会确保为插入顺序。 此行为是自 3.6 版开始的 CPython 实现细节。 |
30 seeleling May 14, 2021 升级 Python |
31 francis59 May 14, 2021 |
32 cherbim May 15, 2021 via iPhone 不好意思,我的 Python 字典是有序的 |
