以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)]