zoukankan      html  css  js  c++  java
  • 字典自定义排序

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

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

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

    但行好事 莫问前程
  • 相关阅读:
    11111
    单例-Singleton-03
    单例-Singleton-02
    单例-Singleton-01
    load和initialize
    OC中的static-01
    GCD-06
    GCD-05
    GCD-03
    UIView-01
  • 原文地址:https://www.cnblogs.com/haifwu/p/15313223.html
Copyright © 2011-2022 走看看