如何按值对词典排序?

  • 问题:
  • 在一个数据库中,一个数字字段有两个字段。字符串字段是唯一的,因此这是字典的键

    我可以按键排序,但如何根据值排序?在

    注意:我在这里读过堆栈溢出问题How do I sort a list of dictionaries by a value of the dictionary?并且可能会更改我的代码以获得字典列表,但是由于我并不真正需要字典列表,所以我想知道是否有更简单的方法可以按升序或降序进行排序

  • 答案:
  • 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}

    对字典进行排序是不可能的,只能得到已排序的字典的表示形式。字典本质上是无顺序的,但其他类型,如列表和元组,则不是。因此,您需要一个有序的数据类型来表示已排序的值,这可能是一个元组列表

    例如

    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(排序后的_x)==x

    对于那些希望按键排序而不是按值排序的用户:

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

    因为不允许拆箱[1]我们可以利用

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

    如果希望输出为dict,可以使用collections.OrderedDict公司名称:

    import collections

    sorted_dict = collections.OrderedDict(sorted_x)