python中的排序内置函数是sorted()但是返回的是list结构。
想要一键获得字典的值排序?一下是一种关于字典排序的函数设计
字典按照值大小排序函数,dict0是输入的字典 ,reverse 决定输出是升序还是降序,True–>降序,False—>升序
def dict_sort(dict0:dict,reverse = False):
#声明函数体reverse 默认值和sorted ()默认的是False
try:
listd = list(dict0.items())# listd 结构是 [(key0:valuses0),...)]
listd = sorted(listd,key=lambda x:x[1],reverse = reverse)#sort
new_dict = {}
#以下代码为转为字典形式输出
for i in listd:
new_dict[i[0]] = i[1]
return new_dict
except Exception as e:
print(e)
return -1
插入于2019年10月8日
**
补充说明一点 如果在实际应用中只是要排序的结果 而不是整个排序后的字典,那么可以省略转化字典的步骤,一下介绍两种简洁使用方法字典排序。
- 使用 匿名函数lambda 表达式 的字典排序查看结果:classCount数据类型是一个字典
- 使用operator标准库中的itemgetter()方法字典排序
**
原理说明:
**两种排序都是基于字典经过item()的转换生成了一个元组结构,经过选择原则的索引第一项,key = lambda x:x[1],或者key=operator.itemgetter(1),这是operator的一个索引方法。
然后在sorted中生成了 列表里面嵌套了元组结构 看下面代码结果。
import operator
dict ={"a":1,"b":10,"c":8,"d":9}#
#方法1
print(sorted(dict.items(),key = operator.itemgetter(1),reverse= True))
print(dict)
print("-----------------------------------\n")
#方法2
print(sorted(dict.items(),key=lambda x:x[1],reverse=True))
print(dict)
结果:[(‘b’, 10), (‘d’, 9), (‘c’, 8), (‘a’, 1)]{‘a’: 1, ‘b’: 10, ‘c’: 8, ‘d’: 9}-----------------------------------[(‘b’, 10), (‘d’, 9), (‘c’, 8), (‘a’, 1)]{‘a’: 1, ‘b’: 10, ‘c’: 8, ‘d’: 9}
**