python中字典关于value和key排序

以Leecode第692题为例。这里采用哈希表来做。

我们先把给定的数组按照词频加入到字典中。

words = ["i", "love", "leetcode", "i", "love", "coding"]
#将word按照词频变成一个字典,键值为元素,value为出现的频次
hash={'the': 4, 'day': 1, 'is': 3, 'sunny': 2}

那么我们接下来要做的就是对字典进行排序,题目中有两个排序要求

一个也是按照value的大小降序排序。

另一个是按照key进行升序排序。

我们这里用到的方法为sorted(iterable, key,reverse)

参数解释:

iterable: 可迭代对象。

key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
常用的用来作为参数key的函数有 lambda函数和operator.itemgetter()
尤其是列表元素为多维数据时,需要key来选取按哪一位数据来进行排序。

reverse:默认为正序,如果要降序则为True

接下来分多种情况,大家对比不同的情况就大概知道怎么用了

hash={'the': 4, 'day': 1, 'is': 3, 'sunny': 2}
#首先我们取hash.items(),对于字典,hash.items()的元素是二维的,第一维为key,第二维为value
#hash.items()=[('the', 4), ('day', 1), ('is', 3), ('sunny', 2)]
#此处我们取x:x[0],也就是按照key排序,默认正序
①res=sorted(hash.items(),key=lambda x:x[0])(倒序的话reverse=True)
输出:[('day', 1), ('is', 3), ('sunny', 2), ('the', 4)]

#此处我们取x:x[1],也就是按照key排序,默认正序
②res=sorted(hash.items(),key=lambda x:x[1])(倒序的话reverse=True)

输出:[('day', 1), ('sunny', 2), ('is', 3), ('the', 4)]

#对于int类型的,我们逆序还有种方法,就是在x[0]前加负号
③res=sorted(hash.items(),key=lambda x:-x[1])

输出:[('the', 4), ('is', 3), ('sunny', 2), ('day', 1)]

#####
#以上都是按照单个排序的,如果我们同时按照key和value排序,怎么做呢?
#####
#那变化就是将 x:后面变成一个元组形式,就是对这两个都进行排序
(这里把x[1]放前面,我理解的是优先按照value排序)
④res=sorted(hash.items(),key=lambda x:(x[1],x[0]))

输出:[('day', 1), ('sunny', 2), ('is', 3), ('the', 4)]

#那么要实现对value降序,对key升序,value因为是int类型那就加个负号
⑤res=sorted(hash.items(),key=lambda x:(-x[1],x[0]))

输出:[('the', 4), ('is', 3), ('sunny', 2), ('day', 1)]


 

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值