Python中按字典降序排序

11

我是Python的新手,想知道是否有一种更常见的方式将字典按降序排序,而不是我现在使用的方法:

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

4
你的方法很好。 - Maroun
sorted函数返回什么内容? - ᴀʀᴍᴀɴ
1
@Arman 排序后的结果。 - Maroun
1
请注意,字典是无序的。这将仅创建一个按键值对排序的元组列表。但我想你可能已经知道了。 - SiHa
如果你想要略微提升速度,那么使用from operator import itemgetter; sorted(d.items(), key=itemgetter(1), reverse=True)。(在Python 2中使用iteritems() - Ashwini Chaudhary
6个回答

20

你可以使用 sorted()reverse 选项:


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

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


这个解决方案比OP的更好吗? - ᴀʀᴍᴀɴ

8

Python 字典是不可排序的。您的 sorted_dictionary 输出不是一个字典,而是一个列表。您需要使用 OrderedDict

from collections import OrderedDict

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

1
OP并不一定希望输出一个字典。他们可能只需要一个(键,值)对的列表。换句话说,输出实际上不是一个字典,并不是问题的重点。 - Martijn Pieters
2
他要求“对字典进行排序”。所以我想他希望得到一个按顺序排列的字典作为输出。 - Francesco Nazzaro
他们问是否在 lambda 中使用 - 来反转排序是一个好习惯。 - Martijn Pieters

2

这应该可以工作

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

0

以下是一段代码,可以获取指定范围内所有数字的质因数及其指数

    from sympy import primefactors

对于num在1到10001的范围内: k = num prime_factors = {}

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)

0

按值升序排序字典

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

-1

按 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接