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

Python如何将字符频次元组列表转为按频次分组的字典

实现方案

本次需求是统计字符串内各字符的出现频次,最终生成以频次为键、对应该频次的所有字符组成的列表为值的字典。

你目前的代码已经完成了字符和对应频次的去重提取,只需要补充按频次分组的逻辑即可,以下是可直接运行的实现:

方法1:基础字典实现(无需额外导包)

逻辑最直观,适合入门理解:

s = 'aaabccdd'
# 第一步:统计每个字符的出现频次
char_count = {}
for c in s:
    # 字符已存在就计数+1,不存在就初始化为1
    char_count[c] = char_count.get(c, 0) + 1

# 第二步:按频次分组
res = {}
for char, cnt in char_count.items():
    # 频次不存在就先初始化空列表,再追加字符
    res.setdefault(cnt, []).append(char)

# 若需要按键(频次)升序排列,加上下方排序逻辑
res = dict(sorted(res.items()))
print(res)

运行输出:

{1: ['b'], 2: ['c', 'd'], 3: ['a']}

如果要基于你原有代码已经生成的h列表(元素为(字符, 频次)格式的元组)做分组,可以直接跳过第一步统计逻辑,遍历h完成分组即可:

h = [('a', 3), ('d', 2), ('b', 1), ('c', 2)]
res = {}
for char, cnt in h:
    res.setdefault(cnt, []).append(char)
res = dict(sorted(res.items()))
print(res)

方法2:用标准库简化实现

Python标准库collections提供了专门的计数工具,代码更简洁、运行效率更高:

from collections import Counter, defaultdict

s = 'aaabccdd'
# 一步完成字符频次统计
char_count = Counter(s)
# 初始化默认值为列表的字典,省去键存在判断
res = defaultdict(list)
for char, cnt in char_count.items():
    res[cnt].append(char)

res = dict(sorted(res.items()))
print(res)

注:原有代码中在循环内反复调用list.count()的写法时间复杂度较高,字符串长度较大时运行速度会明显变慢,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:48:45