1. 字典自定义排序
首先按值降序排序,若值相等,则按键升序排序。
2. 题解
Python内置函数sorted,然后设定排序规则,对于键-x[1],对于值x[0]。
这里输出的是list,根据需要转换成dict即可。
nums = sorted(nums_dict.items(), key=lambda x: (-x[1], x[0]))
3. 例题
给定一个字符串数组,再给定整数k,请返回出现次数前k名的字符串和对应的次数。
返回的答案应该按字符串出现频率由高到低排序。如果不同的字符串有相同出现频率,按字典序排序。
对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。
比如"ah1x"小于"ahb","231"<”32“
字符仅包含数字和字母。
输入:["a","b","c","b"],2 返回值:[["b","2"],["a","1"]] 说明: "b"出现了2次,记["b","2"],"a"与"c"各出现1次,但是a字典序在c前面,记["a","1"],最后返回[["b","2"],["a","1"]]
4. Code
1 class Solution: 2 def topKstrings(self , strings , k ): 3 res = [] 4 nums_dict = dict() 5 for num in strings: 6 if num not in nums_dict: 7 nums_dict[num] = 1 8 else: 9 nums_dict[num] = nums_dict.get(num) + 1 10 # 先按值降序排序,值相等,按键降序排序 11 nums = sorted(nums_dict.items(), key=lambda x: (-x[1], x[0])) 12 i = 0 13 for num in nums: 14 temp = [num[0], str(num[1])] 15 res.append(temp) 16 i += 1 17 if i >= k: 18 break 19 return res 20 21 22 if __name__ == '__main__': 23 nums, k = ["a", "b", "c", "b"], 2 24 print(Solution().topKstrings(nums, k))
5. 结语
努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!
如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。