
本文将介绍如何在python中高效地统计一个字典中嵌套列表的值在另一个目标列表中的总出现次数。针对常见但效率低下的o(n³)嵌套循环方法,文章提出了一种通过预处理目标列表来优化性能的o(n)解决方案,并详细分析其实现原理、代码示例及性能优势。
在Python编程中,我们有时会遇到这样的需求:给定一个字典 my_dict,其键对应的值是一个列表;同时给定一个独立的目标列表 my_list。我们的目标是创建一个新的字典,其中包含 my_dict 的所有键,但对应的值是该键所关联的列表中所有元素在 my_list 中出现的总次数。
例如,考虑以下数据:
my_dict = {'A': ['A', 'B'], 'B': ['C', 'D'], 'C': ['E', 'F']}
my_list = ['A', 'D', 'A', 'C', 'F', 'F']我们期望的输出是 {'A': 2, 'B': 2, 'C': 2}。这是因为:
初学者可能会倾向于使用多层嵌套循环来解决这个问题。一种直观但效率不高的思路是:对于 my_dict 中的每个键及其关联列表,遍历该列表中的每个元素,然后针对每个元素再次遍历 my_list 来统计其出现次数。
这种方法通常会导致极差的性能。具体来说,其时间复杂度会达到 O(N³),其中:
因此,总的迭代次数大致为 K * M * N。在上述示例中,这相当于 3 * 2 * 6 = 36 次基本操作,对于小规模数据尚可接受。但当 K、M、N 变得很大时,O(N³) 的性能会迅速导致程序运行缓慢甚至崩溃。例如,如果 my_list 很大,每次在 my_list 中查找一个元素,都需要遍历 my_list 的大部分内容,这会重复进行大量不必要的计算。
为了显著提升性能,我们可以采用一种预处理策略,将时间复杂度从 O(N³) 降低到 O(N)。核心思想是:首先对 my_list 进行一次遍历,统计其中每个元素的出现次数,并将其存储在一个字典中。由于字典的查找和插入操作平均时间复杂度为 O(1),这使得后续的计数汇总变得极其高效。
下面是使用纯Python实现此优化方案的函数:
Tripo AI
AI驱动的3D建模平台
970
查看详情
def count_nested_values(my_dict: dict, my_list: list) -> dict:
"""
高效统计字典嵌套列表值在目标列表中出现的总次数。
参数:
my_dict (dict): 键为字符串,值为字符串列表的字典。
my_list (list): 包含字符串元素的目标列表。
返回:
dict: 一个新字典,键为my_dict的键,值为对应元素在my_list中出现的总次数。
"""
# 步骤1: 预处理my_list,统计每个元素的出现次数
# 使用字典存储计数,实现O(1)查找
counts = {}
for list_val in my_list:
counts[list_val] = counts.get(list_val, 0) + 1
# 步骤2: 遍历my_dict,根据预处理的counts字典汇总计数
new_dict = {}
for key, associated_list in my_dict.items():
new_dict[key] = 0 # 初始化当前键的总计数
# 遍历与当前键关联的列表中的每个元素
for item_in_associated_list in associated_list:
# 从预处理的counts字典中获取该元素的出现次数
# 使用.get()方法,如果元素不存在于my_list中,则默认为0,避免KeyError
new_dict[key] += counts.get(item_in_associated_list, 0)
return new_dict
# 示例用法
my_dict = {'A': ['A', 'B'], 'B': ['C', 'D'], 'C': ['E', 'F']}
my_list = ['A', 'D', 'A', 'C', 'F', 'F']
result = count_nested_values(my_dict, my_list)
print(result)输出:
{'A': 2, 'B': 2, 'C': 2}让我们详细分析上述优化方案的性能:
步骤1: 预处理 my_list
步骤2: 遍历 my_dict 并汇总计数
综合以上两步,整个算法的整体时间复杂度为 O(N_list + K + N_nested_values)。在最坏情况下,这可以简化为 O(N),其中 N 是输入数据(my_list 长度和 my_dict 中所有元素的总数)的最大规模。
与 O(N³) 的原始方法相比,O(N) 的算法在处理大规模数据时具有压倒性的性能优势。例如,如果 N 为 1000,O(N³) 意味着 10亿次操作,而 O(N) 仅意味着 1000次操作。
以上就是Python高效统计字典嵌套列表值在目标列表中的出现次数的详细内容,更多请关注其它相关文章!
# 值为
# 荥阳教育网站建设
# 网站建设巩义哪家强
# 页游网站如何推广的
# 提升公众号关键词排名
# 玉树抖音seo优化
# 抚顺网站建设联系电话
# 现在如何做网站推广
# 大兴区电子电气网站建设
# 东莞网站推广文案
# 呼伦贝尔整合营销推广
# 是在
# 就会
# python
# 几种
# 浮点
# 键值
# 是一个
# 出现了
# 列表中
# 遍历
# 标准库
# 键值对
# 性能瓶颈
# python编程
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
《鹿路通》退余额方法
如何定制PrimeNG Sidebar的背景颜色
PHP页面重载后变量状态保持:实现用户档案连续浏览的教程
西瓜视频怎么查看访客记录_西瓜视频访客记录查看方法
《画加》约稿流程
汽水音乐官网网页版入口 汽水音乐官网网页版在线入口
VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略
《微信》视频号原创声明开启方法
鲁班大师乓乓皮肤获取方法
J*aScript模块加载器_RequireJS原理分析
《搜书吧》阅读书籍方法
J*aScript大数运算_BigInt使用指南
快手缓存清理方法
CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现
荣耀Magic6 Pro拍照成像偏暗_荣耀Magic6 Pro夜景优化
Apple Music无故扣费引质疑
《虎扑》关闭社区内容推荐方法
附近酒吧怎么找?
顺丰官方查单号入口 顺丰快递单号查询官网入口
创建快捷方式启动系统保护
《植物大战僵尸3》火龙草作用介绍
解决C#跨线程访问XML对象的异常 安全的并发XML处理模式
cad视图选项卡不见了怎么办_cad视图标签恢复显示方法
小米倒班助手添加日历提醒
如何在CSS中实现盒模型多列间距_grid-gap与padding结合
使用jQuery精确检测除指定元素外任意位置的点击事件
《三角洲行动》战斗步枪与机枪类改装代码分享
MySQL多重关联查询:利用别名高效获取同一表的多个关联字段
React应用中Commerce.js数据加载与状态管理最佳实践
使用逻辑应用(Logic Apps)自动处理邮件附件中的XML到Excel
CSS如何在页面中引入重置样式_使用Normalize.css或Reset.css统一浏览器默认样式
12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案
风神瞳获取全攻略
外媒评《燕云十六声》DIY载具新玩法:很像《塞尔达传说王国之泪》!
猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法
在Django单元测试中优雅处理信号:基于环境的条件执行策略
PDF如何批量加注释_PDF多文件批注高亮操作教程
批改网网页版登录 批改网电脑版学生登录入口
Word 2003字体大小设置方法
苹果手机怎么合并照片_苹果手机合并多张照片的操作方法
PHP动态导航按钮:根据用户登录状态切换链接与文本
263企业邮箱如何设置邮件转发功能
使用TinyButStrong生成HTML并结合Dompdf创建PDF教程
电脑双系统如何安装和卸载 Windows和Linux双系统安装教程【详解】
抖音号升级企业号怎么改名字?升级企业号有哪些好处?
研招网官方网站招生平台入口_中国研究生招生信息网官网登录
J*aScript实现下拉菜单驱动的动态表格数据展示
基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口
德邦快递会员怎么开通
Microsoft Edge网页字体太淡看不清怎么办_Microsoft Edge字体渲染优化技巧
2025-11-29
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。