python字典按值排序排序

Python字典按值排序



摘自stackoverflow

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

结果为: sort_dict

代码解读



  • 首先是 lambda 表达式,可以看作一个匿名函数。
puls_1 = lambda x:x+1     # 即定义一个匿名函数 将传入的参数加1
plus_1(1)    # 结果为2

# 同样
sum = lambda x,y: x+y
sum(2,3)    #结果为5。2,3对应参数x,y

lambda 形参列表 : 函数返回值表达式语句

  • sorted函数
    根据sorted函数的解释key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。听起来很拗口,没太明白。看了好多例子key的值都是lambda表达式,所以就理解为,当我们对对象A排序的时候,A即为哪个可迭代对象,我们需要指定A中的一个元素作为排序标准,lambda 返回的值 即使排序时候所用的标准。所以我们那将上面的返回值加上负号的时候,就变成了按值降序排列: 降序排列

  • 字典的items()方法
    返回可遍历的(键, 值) 元组列表。 items

总结



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

因为a.items() 的返回值为[('a', 1), ('b', 4), ('c', 3), ('d', 5), ('e', 2)],key的含义即根据每个元祖中的第二个元素排序。加上 负号的话即是降序。如果不想返回字典,只需要值的列表的话可以改为[v for k,v in sorted(a.items(), key=lambda item: item[1])],只需要建的列表的话卡哇伊把v改成k