[英]Sorting dictionary descending in Python
我是 Python 的新手,我想知道是否有比我這樣做的方式更常見的按降序對字典進行排序的方法:
sorted_dictionary = sorted(dict.items(), key=lambda x: -x[1])
您可以使用sorted()
的reverse
選項:
sorted(dict.items(), key=lambda kv: kv[1], reverse=True)
這會產生完全相同的輸出,即使值不是數字也能工作。
Python 字典不可排序。 您的sorted_dictionary
輸出不是字典而是列表。 你必須使用OrderedDict
from collections import OrderedDict
sorted_dictionary = OrderedDict(sorted(dict.items(), key=lambda v: v, reverse=True))
這應該工作
{k: v for k, v in sorted(dict.items(), key=lambda item: item[1], reverse = True)}
根據值按升序排序字典
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
這是獲取范圍內所有數字的所有質因數和指數的代碼
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)
在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.