【问题标题】:Sorting dictionary descending in Python在Python中对字典进行降序排序
【发布时间】:2016-06-08 00:52:14
【问题描述】:

我是 Python 新手,我想知道是否有比我现在的方式更常见的按降序对字典进行排序的方式:

sorted_dictionary = sorted(dict.items(), key=lambda x: -x[1])

【问题讨论】:

  • 你的方法很好。
  • sorted 函数返回什么?
  • @Arman 结果,排序。
  • 尽管请注意,根据定义,字典是无序的。这将简单地创建一个键值对元组的排序列表。但我想你可能知道这一点。
  • 如果您希望稍微提高速度,请使用from operator import itemgetter; sorted(d.items(), key=itemgetter(1), reverse=True)。(Python 2 中的iteritems()

标签: python sorting dictionary


【解决方案1】:

sorted() 有一个reverse 选项,您可以改用:

sorted(dict.items(), key=lambda kv: kv[1], reverse=True)

这会产生完全相同的输出,即使值不是数字也可以工作。

【讨论】:

  • 是不是比OP的方案好?
【解决方案2】:

Python 字典不可排序。您的 sorted_dictionary 输出不是字典,而是列表。你必须使用OrderedDict

from collections import OrderedDict

sorted_dictionary = OrderedDict(sorted(dict.items(), key=lambda v: v, reverse=True))

【讨论】:

  • OP 不一定期望字典作为输出。他们可能对(键,值)对列表很好。换句话说,输出实际上不是字典是不是问题的重点
  • 他要求“对字典进行排序”。所以我在想他想要一本字典作为输出。
  • 他们询问在lambda 中使用- 是否是一种反转排序的好习惯。
【解决方案3】:

按python列表中的值降序排序:

items = {'a':6 , 'b':3 , 'c':1 , 'd':9}
sortedItems = sorted(items , key=items.get , reverse = True)
for element in sortedItems :
       print (element, items.get(element))

输出是:

d 9
a 6
b 3
c 1

【讨论】:

    【解决方案4】:

    根据值升序对字典进行排序

    d = {'a':5 , 'b':3 , 'd':1 , 'e':2 , 'f':4}
    result = sorted(d.items() , key=lambda t : t[1])
    
    for k,v in result:
      print(k,v)
    

    结果

    d 1
    e 2
    b 3
    f 4
    a 5
    
    
    # d.items=[('a', 5), ('b', 3), ('d', 1), ('e', 2), ('f', 4)]
    # lambda t = ('a',5)
    # lambda t : t[1] = 5
    # result = [('d', 1), ('e', 2), ('b', 3), ('f', 4), ('a', 5)]
    # k ,v = ('d',1)
    # k = 'd'  
    # v = 1
    

    按值降序排序字典

    d = {'a':5 , 'b':3 , 'd':1 , 'e':2 , 'f':4}
    result = sorted(d.items() , key=lambda t : t[1] , reverse=True)
    
    for k,v in result:
      print(k,v)
    

    结果

     a 5
     f 4
     b 3
     e 2
     d 1
    
    
    # d.items=[('a', 5), ('b', 3), ('d', 1), ('e', 2), ('f', 4)]
    # lambda t = ('a',5)
    # lambda t : t[1] = 5
    # result = [('a', 5), ('f', 4), ('b', 3), ('e', 2), ('d', 1)]
    # k ,v = ('a',5)
    # k = 'a'  
    # v = 5
    

    【讨论】:

      【解决方案5】:

      这是获取范围内所有数字的所有质因数和指数的代码

          from sympy import primefactors
      

      对于范围内的 num (1,10001): k = 数量 素数因子 = {}

      for i in primefactors(num):
          count = 0
          while num % i == 0:
              num = num/i
              count += 1
          prime_factors[i] = count  
      
      result = sorted(prime_factors.items() , key=lambda t : t[0] , reverse=True)
      
      count = 1
      num = k
      
      print '\n%d can be broken down into the following prime factors:' % num,
      print '\n%d = ' % num,
      for k,v in result:
          if count < len(result):
              print '(%d ** %d) *' % (k,v),
              count += 1
          else:
              print '(%d ** %d)' % (k,v)
      

      【讨论】:

        【解决方案6】:

        这应该可以工作

        {k: v for k, v in sorted(dict.items(), key=lambda item: item[1], reverse = True)}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-05
          • 1970-01-01
          • 2019-09-09
          • 2016-01-01
          • 2017-07-12
          • 1970-01-01
          • 2020-12-10
          • 2021-04-17
          相关资源
          最近更新 更多