如何统计字典中值列表的唯一组合及其出现频次
统计字典中每个值列表的标准化组合(去重排序后转元组)的出现频次,以标准化元组为键、频次为值,按频次降序输出。避免子集计数、键覆盖或未排序导致的错误,适用于中等规模数据。
本文介绍如何准确统计字典中所有值列表(如 ['x', 'y'])的标准化组合(排序后去重)及其出现次数,并按频次降序输出形如 n=5: ('x', 'y') 的结果,避免因字典键重复导致的覆盖问题。
在数据处理中,常会遇到这样的需求:统计字典中每个值列表的唯一组合及其出现频次。比如,给定字典 {'HH1': ['x'], 'HH2': ['y', 'x'], ...},目标是得到每个标准化组合(如 ('x', 'y'))出现的次数,并按频次降序输出。下面就来详细拆解正确做法。

核心目标直截了当:将每个值列表标准化为有序元组(例如 ['y', 'x'] → ('x', 'y')),然后统计每种标准化组合在整个字典中间出现的精确次数。但实际操作中,不少人容易掉进这几个坑里:
- 对子集组合(如
combinations(..., r))进行计数,导致统计的是“子集出现频次”,而非“原始列表匹配频次”; - 用
n=count作为字典键,结果多个不同组合若具有相同频次(比如两个组合都出现 1 次),后写入的会覆盖先写入的; - 未对列表排序即转元组,
['x','y']和['y','x']被视为不同键,无法合并。
✅ 正确解法的关键在于:以标准化元组为字典键,频次为值。下面是推荐实现,简洁、高效且语义清晰:
from collections import defaultdict
HH_dict = {
'HH1': ['x'], 'HH2': ['y', 'x'], 'HH3': ['x', 'z'], 'HH4': ['x'], 'HH5': ['x'],
'HH6': ['x'], 'HH7': ['x'], 'HH8': ['x', 'y', 'z'], 'HH9': ['x'], 'HH10': ['x', 'y'],
'HH11': ['x'], 'HH12': ['x'], 'HH13': ['x'], 'HH14': ['x'], 'HH15': ['x', 'y'],
'HH16': ['x', 'y'], 'HH17': ['x', 'y'], 'HH18': ['x']
}
# 步骤1:统计每种标准化组合(排序后转tuple)的出现次数
combination_count = defaultdict(int)
for lst in HH_dict.values():
# 标准化:去重 + 排序 + 转元组(确保 ['y','x'] 和 ['x','y'] 视为同一组合)
key = tuple(sorted(set(lst)))
combination_count[key] += 1
# 步骤2:按频次降序输出(频次相同时可选按元组字典序升序,增强可读性)
for combo, count in sorted(combination_count.items(), key=lambda x: (-x[1], x[0])):
print(f"n={count}: {combo}")
输出结果:
n=11: ('x',)
n=5: ('x', 'y')
n=1: ('x', 'z')
n=1: ('x', 'y', 'z')
? 关键说明:
set(lst)消除列表内重复元素(本例虽无重复,但属于健壮性保障);sorted(...)确保顺序一致,使等价组合映射到同一键;- 使用
defaultdict(int)或原生 dict 手动判断均可,避免Counter在此处的误用; sorted(..., key=lambda x: (-x[1], x[0]))实现主序按频次降序、次序按组合升序,输出稳定且易读。
⚠️ 注意事项:
- 不要使用
n=count作为输出字典的键(如renamed_lists[f"n={count}"]),这会丢失信息; - 避免遍历
combinations(..., r)——本题要求的是完整列表的匹配,而非其幂集; - 若原始数据中存在空列表
[],需单独处理(tuple(sorted(set([])))得()),根据业务决定是否纳入统计。
该方法时间复杂度为 O(N×M log M),其中 N 为字典长度,M 为单个列表平均长度,兼顾效率与可维护性,适用于中等规模数据场景。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。
CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。
Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。
Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。
CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。


























