![]() |
1
5979
Python 3.7+或CPython 3.6it's an implementation detail .
或
不可能对字典进行排序,只能获得已排序字典的表示形式。字典本质上是无序的,但其他类型(如列表和元组)则不是。因此,您需要一个有序的数据类型来表示已排序的值,这将是一个列表,可能是一个元组列表。 例如,
对于那些希望按键排序而不是按值排序的用户:
unpacking is not allowed 我们可以使用
如果希望输出为dict,可以使用
|
![]() |
2
1450
简单到:
|
![]() |
3
1003
您可以使用:
这将根据字典中每个条目的值从最小到最大对字典进行排序。
要按降序排序,只需添加
输入:
输出:
|
![]() |
4
253
dict值的排序列表:
按值排序的(键、值)对列表:
|
![]() |
5
174
在最近的Python2.7中,我们有了新的 OrderedDict
OrderedDict的行为与普通dict类似:
|
![]() |
6
112
更新:2015年12月5日使用Python 3.5 OrderedDict 收藏 模块作为一个可行的、现代的替代方案——旨在解决这类问题。
有序的 文档也提供了一个非常类似的示例,但使用lambda作为排序函数:
|
![]() |
7
102
差不多和 Hank Gay's answer :
或者按照John Fouhy的建议稍微优化:
|
![]() |
8
81
它通常使用起来非常方便 namedtuple
首先以最低分数排序:
首先以最高分数排序:
|
![]() |
9
81
截至 Python 3.6 将订购内置dict好消息是,OP最初的用例是将从数据库中检索到的对映射到内置Python v3.6+dict中,该数据库使用唯一的字符串ID作为键,数字值作为值,现在应该遵循插入顺序。
将存储在两个Python元组中,k_seq和v_seq(按数字索引对齐,当然长度相同),然后:
在这种情况下(对于新的Python 3.6+内置dict!):
在我的机器上安装的Python 3.5中,当前会产生:
细节:正如Raymond Hettinger在2012年提出的(参见主题为python开发的邮件) "More compact dictionaries with faster iteration" "Python 3.6 dict becomes compact and gets a private version; and keywords become ordered" "Compact and ordered dict" 在Python3.6中,我们现在可以使用内置dict来维护插入顺序!! 希望这将导致作为第一步的薄层有序的ICT实现。正如@JimFasarakis Hilliard所指出的,一些人在将来也会看到OrderedDict类型的用例。我认为整个Python社区都会仔细检查,这是否经得起时间的考验,以及接下来的步骤是什么。
第二,因为它鼓励更容易地使用
雷蒙德·赫廷格(Raymond Hettinger)好心地提供了文件,解释了 The Tech Behind Python 3.6 Dictionaries 从他的旧金山Python MeTup集团介绍2016DEC-08。 也许相当多的堆栈溢出高装饰的问题和答案页面将收到这些信息的变体,许多高质量的答案也需要每个版本的更新。 whatsnew36 但是 引用被删去了一点悲观;-)。它继续是“(这在将来可能会发生变化,但在将语言规范更改为所有当前和未来Python实现的命令保留语义之前,希望在一些版本中使用这种新的dict实现;这也有助于保持与旧版本的语言的向后兼容性,其中随机迭代离子顺序仍然有效,例如Python 3.5)。” 因此,就像在某些人类语言(如德语)中一样,用法塑造了语言,而意志现在已经被宣布。。。在里面 什么新闻36 更新2017-12-15:
因此,dict插入顺序的3.6版CPython副作用现在已经成为语言规范的一部分(不再只是一个实现细节)。该邮件线程还显示了一些独特的设计目标
|
![]() |
10
47
我也有同样的问题,我这样解决:
(回答“不可能对dict排序”的人没有读过这个问题!事实上,“我可以按键排序,但如何根据值排序?”显然意味着他想要一个按键值排序的键列表。) 请注意,顺序没有很好地定义(具有相同值的键将在输出列表中以任意顺序排列)。 |
![]() |
11
45
如果值是数字,也可以使用
|
![]() |
12
38
http://docs.python.org/dev/library/collections.html#ordereddict-examples-and-recipes 享受;-) |
![]() |
13
29
起初的
爆笑
等级
|
![]() |
14
28
尝试以下方法。让我们用以下数据定义一个名为mydict的字典:
这将返回以下输出:
另一方面,如果要按值对词典进行排序(如问题中所述),可以执行以下操作:
此命令的结果(按值对字典排序)应返回以下内容:
|
![]() |
15
26
在那之前,你必须使用
|
![]() |
16
24
您还可以创建“反向索引”
现在你的倒数有了值;每个值都有一个适用键的列表。
|
![]() |
17
22
collections.Counter . 注意,这将适用于数值和非数值。
|
![]() |
18
17
您还可以使用可以传递给键的自定义函数。
|
![]() |
19
16
|
![]() |
20
14
|
![]() |
21
13
如果您没有Python2.7或更高版本,那么最好是迭代生成器函数中的值。(有一个
和
您还可以打印出每个值
如果不使用Python 3.0或更高版本,请记住在打印后删除括号 |
![]() |
22
13
As pointed out by Dilettant ,Python3.6现在将 遵守秩序 仅适用于>=3.6!
当您尝试在包含字符串和整数的iterable上使用sorted时,sorted()将失败。当然,您可以强制使用str()进行字符串比较。但是,在某些情况下,您希望这样做
真实的
欢迎提出改进意见。
|
![]() |
23
12
这里有一个使用zip的解决方案
因此,我们可以做到以下几点:
|
![]() |
24
9
从…起 dicts :
|
![]() |
25
9
刚从学校学到相关技能 Python for Everybody .
使用列表理解,一行是:
样本输出:
|
![]() |
26
8
迭代dict并按其值降序排序:
|
![]() |
27
7
|
![]() |
28
7
|
![]() |
29
7
为了完整起见,我发布了一个使用 heapq . 注意,此方法适用于数值和非数值
|
![]() |
30
6
|
![]() |
July · 如何定义数字间隔,然后四舍五入 1 年前 |
![]() |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
|
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
![]() |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
|
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
![]() |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |