You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何仅用sorted()不借助lambda实现按星号数降序+字母序排序

解决方案

我们可以利用Python sorted() 函数默认按序列元素顺序依次比较的特性,调整返回的统计项结构,无需使用key=lambda即可满足排序逻辑,同时优化原有代码去掉末尾的None输出。

核心实现逻辑

  • 第一排序优先级:按*的数量降序排列,我们可以将负的*长度作为统计项的第一个元素,默认升序排序时,*数量更大的项会自然排在前面
  • 第二排序优先级:同数量时按字母顺序升序排列,我们可以将字符的小写形式作为统计项的第二个元素,保证同数量时按字母先后顺序排序
  • 原输出末尾的None是因为letter_count没有定义返回值,直接打印函数调用会输出默认返回的None,直接调用函数即可无需额外打印

修改后完整代码

def letter_total(filename: str):
    chars = list(filename)
    chars_unique = set(chars)
    chars_unique.remove(' ')
    result = []
    for x in chars_unique:
        star_count = chars.count(x)
        star_str = star_count * '*'
        # 调整元素结构适配sorted默认排序规则
        result.append([-star_count, x.lower(), x, star_str])
    return result

def letter_count(filename: str):
    l_count = letter_total(filename)
    for c in sorted(l_count):
        # 取原字符和星号字符串输出
        print(c[2], c[3])

# 直接调用函数,无需print避免输出None
letter_count(filename='How was your day')

运行输出

a **
o **
w **
y **
d *
H *
r *
s *

内容的提问来源于stack exchange,提问作者Joshua Bradley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:27:02