字典自定义排序

Posted 抚琴尘世客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字典自定义排序相关的知识,希望对你有一定的参考价值。

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. 结语

  努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

  如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。

 

但行好事 莫问前程

以上是关于字典自定义排序的主要内容,如果未能解决你的问题,请参考以下文章

python按自定义顺序排序字典列表[重复]

python urllib.parse.urlencode()和字典自定义ascii排序

VSCode自定义代码片段——CSS选择器

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段(vue主模板)

VSCode自定义代码片段——声明函数