回答

收藏

如何按值对字典进行排序?

技术问答 技术问答 243 人阅读 | 0 人回复 | 2023-09-11

我有一个值字典读取数据库中的两个字段:一个字符串字段和一个数字字段。字符串字段是唯一的,所以它是字典的键。' F- S0 n% l* M5 R/ \) ^# M
我可以对键进行排序,但是如何根据值进行排序?
2 t# Z& b2 N: Q/ O1 L) W" I) |注:我在这里阅读了如何根据字典值对字典列表进行排序的堆栈溢出问题?我的代码可能会改为字典列表,但因为我真的不需要字典列表,我想知道是否有更简单的解决方案可以按升序或降序排序。8 X; P% T( ]+ ]) U3 q0 V; Y. Q
                                                                , d2 x' ?8 E& @) Q; V) \
    解决方案:                                                               
5 K' @4 u9 q% \: T/ h                                                                Python 3.7  或 CPython 3.6字典在 Python 3.在  中保留插入顺序。CPython 3.6 是一样的,但它是一个实现细节。+ P0 ]! }  V) {: b& A
    ' P% y. w5 Z. A. F
  • >>> x = {1: 2,3: 4,4: 3,2: >>> {k: v for k,v in sorted(x.items(),key=lambda item: item(1)}{0:0,2:0,1: 2,4:3,3:4}code]或者9 Z% f) Z* J; J
  • [code]>>> dict(sorted(x.items(),key=lambda item: item[1])(0:0,2: 1,1: 2,4: 3,3: 4code]较旧的 Python不可能对字典进行排序,只能获得排序字典的表示。字典本质上是无序的,但其他类型,如列表和元组,不是。所以你需要一个有序的数据类型来表示排序后的值,这将是一个列表——可能是一个元组列表。, N/ ~7 v# v8 z% Y  T. M# k
  • 例如,[code]import operatorx = {1: 2,3: 4,4: 3,2: sorted_x = sorted(x.items(),key=operator.itemgetter(1))
    $ h0 B1 Q* G" [
sorted_x元组列表将根据每个元组中的第二个元素进行排序。dict(sorted_x) == x.  S; Z* h( l# J5 Q
对于那些希望对键而不是值得排序的人:, U% g, v# B6 A* G$ X
    import operatorx = {1: 2,3: 4,4: 3,2: sorted_x = sorted(x.items(),key=operator.itemgetter(0))
    ) i( C$ X4 l, [1 _, ^
在 Python3 我们可以使用它,因为它不允许解包。
. V- b& e$ j9 o+ y7 i: c9 [: Q
    x = {1: 2,3: 4,4: 3,2: sorted_x = sorted(x.items(),key=lambda kv: kv[1])9 K& Q* R% m, l8 N7 c. u( m
如果要将输出作为字典,可以使用collections.OrderedDict:8 l( Z2 _! c5 |, y
    import collectionssorted_dict = collections.OrderedDict(sorted_x)) n: f, E+ [2 G' ^
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则