python中如何按值对字典排序?

发布于 2021-02-02 23:24:56

我有一个从数据库中的两个字段读取的值字典:字符串字段和数字字段。字符串字段是唯一的,因此这是字典的键。

我可以对键进行排序,但是如何根据值进行排序?

关注者
0
被浏览
430
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    Python 3.7+或CPython 3.6

    字典在Python 3.7+中保留插入顺序。在CPython 3.6中相同,但是它是一个实现细节。

    >>> x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
    >>> {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}
    {0: 0, 2: 1, 1: 2, 4: 3, 3: 4}
    

    要么

    >>> dict(sorted(x.items(), key=lambda item: item[1]))
    {0: 0, 2: 1, 1: 2, 4: 3, 3: 4}
    

    较旧的Python

    无法对字典进行排序,只能获得已排序字典的表示形式。字典本质上是无序的,但其他类型(例如列表和元组)不是。因此,你需要一种有序的数据类型来表示排序后的值,这将是一个列表-可能是元组列表。

    例如,

    import operator
    x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
    sorted_x = sorted(x.items(), key=operator.itemgetter(1))
    

    sorted_x将是按每个元组中第二个元素排序的元组列表。dict(sorted_x) == x

    对于那些希望对键而不是值进行排序的人:

    import operator
    x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
    sorted_x = sorted(x.items(), key=operator.itemgetter(0))
    

    在Python3中,由于不允许拆包[1],我们可以使用

    x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
    sorted_x = sorted(x.items(), key=lambda kv: kv[1])
    

    如果要将输出作为字典,则可以使用collections.OrderedDict:

    import collections
    
    sorted_dict = collections.OrderedDict(sorted_x)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看