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

Python实现字符统计并按大小写交替字母顺序排序

问题描述

需要编写一个Python程序,要求:

  • 接收长度不小于20的字符串
  • 统计每个字符的出现次数
  • 按A-a-B-b-C-c的字母顺序展示统计结果

测试语句:"She sells sea shells down by the seashore"
期望输出:

{' ': 7, 'a': 2, 'b': 1, 'd': 1, 'e': 7, 'h': 4, 'l': 4, 'n': 1, 'o': 2, 'r': 1, 'S': 1, 's': 7, 't': 1, 'w': 1, 'y': 1}

我的尝试

方法一:实现统计但大小写未相邻排序

此方法完成了字符统计和字母排序,但大小写字符没有按预期相邻排列:

# 第一种方法实现了统计与字母排序,但大小写字符未按预期相邻
def main():
    input_str = str(input("请输入一段短语:\n"))
    if len(input_str) < 20:
        print("请输入长度不小于20的短语。")
    else:
        res = {}
        for keys in sorted(input_str):
            res[keys] = res.get(keys, 0) + 1
        print("输入短语的字符统计结果:\n" + str(res))

main()

运行测试语句的输出:

{' ': 7, 'S': 1, 'a': 2, 'b': 1, 'd': 1, 'e': 7, 'h': 4, 'l': 4, 'n': 1, 'o': 2, 'r': 1, 's': 7, 't': 1, 'w': 1, 'y': 1}

方法二:实现预期排序但未统计次数

此方法用lambda实现了A-a-B-b的排序逻辑,但没有统计字符出现次数,仅输出排序后的字符列表:

# 第二种方法用lambda实现了预期排序,但未统计字符出现次数
def main():
    input_str = str(input("请输入一段短语:\n"))
    if len(input_str) < 20:
        print("请输入长度不小于20的短语。")
    else:
        sorted_list = sorted(input_str, key=lambda s: (s.upper(), s))
        print("输入短语的字符统计结果:\n", sorted_list)

main()

运行测试语句的输出:

[' ', ' ', ' ', ' ', ' ', ' ', ' ', 'a', 'a', 'b', 'd', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'h', 'h', 'h', 'h', 'l', 'l', 'l', 'l', 'n', 'o', 'o', 'r', 'S', 's', 's', 's', 's', 's', 's', 's', 't', 'w', 'y']

请问如何结合两种方法实现需求,或是我的思路有误?


解决方案

你可以把统计字符次数和自定义排序逻辑分开处理:先完成字符计数,再对计数后的字符键按照A-a-B-b的规则排序,最后生成有序字典(Python 3.7及以上版本的字典默认保留插入顺序)。

具体实现代码如下:

def main():
    input_str = input("请输入一段短语:\n")
    if len(input_str) < 20:
        print("请输入长度不小于20的短语。")
        return
    
    # 第一步:统计每个字符的出现次数
    count_dict = {}
    for char in input_str:
        count_dict[char] = count_dict.get(char, 0) + 1
    
    # 第二步:按照自定义规则排序字符键
    # 排序规则:先按字符大写后的顺序,再按原字符(确保大写在前,小写在后)
    sorted_chars = sorted(count_dict.keys(), key=lambda c: (c.upper(), c))
    
    # 第三步:生成有序的统计字典
    sorted_count_dict = {char: count_dict[char] for char in sorted_chars}
    
    print("输入短语的字符统计结果:\n", sorted_count_dict)

main()

运行测试语句的输出:

{' ': 7, 'a': 2, 'b': 1, 'd': 1, 'e': 7, 'h': 4, 'l': 4, 'n': 1, 'o': 2, 'r': 1, 'S': 1, 's': 7, 't': 1, 'w': 1, 'y': 1}

逻辑说明

  1. 统计字符次数:遍历输入字符串,用字典记录每个字符的出现次数,这部分和你第一种方法的逻辑一致。
  2. 自定义排序:对字典的键使用sorted()函数,排序键设置为(c.upper(), c)——先按字符大写后的ASCII值排序(保证同一字母的大小写归为一组),再按原字符排序(保证大写字母排在小写字母前面)。
  3. 生成有序字典:根据排序后的键列表,重新构建字典,Python 3.7+的字典会保留键的插入顺序,最终输出符合预期的排序结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:53:10