0

0

Python中高效实现多模型到单一制造商的映射

DDD

DDD

发布时间:2025-10-29 10:36:44

|

322人浏览过

|

来源于php中文网

原创

python中高效实现多模型到单一制造商的映射

本文探讨了在Python中将多个模型名称映射到其对应单一制造商的效率优化方法。通过将原始的制造商-模型列表映射关系反转为模型-制造商的直接查找字典,可以显著提高查询效率,特别适用于需要多次查询的场景。文章将详细介绍使用嵌套循环和字典推导式构建反向映射字典,并演示如何基于此快速生成制造商列表。

在数据处理和管理中,我们经常会遇到需要将一组数据(如产品模型)映射到其对应的单一类别(如制造商)的场景。当原始数据以“一(类别)对多(数据项)”的形式存储时,例如一个制造商对应多个模型,而我们需要根据模型名称快速查找其制造商时,直接的遍历查询效率较低。本文将介绍一种在Python中高效解决此类映射问题的策略。

问题场景描述

假设我们有一个模型名称列表,需要找出每个模型对应的制造商。我们已有的制造商信息以字典形式存储,其中键是制造商名称,值是该制造商生产的模型名称列表。

示例数据:

立即学习Python免费学习笔记(深入)”;

model_name_list = ["Legion", "ROG", "Nitro", "TUF", "Predator", "Alienware"] # 包含一个未知模型
manufacturer_dict = {
    "ASUS": ["ROG", "TUF"],
    "ACER": ["Predator", "Nitro"],
    "Lenovo": ["Legion"]
}

我们的目标是生成一个manufacturer_list,其中包含model_name_list中每个模型对应的制造商名称。

传统(低效)的查询方法

一种直观但效率不高的方法是,对于model_name_list中的每个模型,都遍历manufacturer_dict来查找其所属的制造商。

manufacturer_list_inefficient = []
for each_model in model_name_list:
    found_manufacturer = "Unknown" # 默认值,处理未找到的情况
    for manufacturer, models in manufacturer_dict.items():
        if each_model in models:
            found_manufacturer = manufacturer
            break # 找到后立即跳出内部循环
    manufacturer_list_inefficient.append(found_manufacturer)

print("低效方法结果:", manufacturer_list_inefficient)
# 结果: ['Lenovo', 'ASUS', 'ACER', 'ASUS', 'ACER', 'Unknown']

这种方法的缺点在于,每次查找一个模型时,都需要遍历manufacturer_dict的所有键值对,并在每个值(模型列表)中进行查找。如果model_name_list很长,或者manufacturer_dict中的模型列表也很长,这种嵌套循环的效率会非常低。

极品模板多语言企业网站管理系统1.2.2
极品模板多语言企业网站管理系统1.2.2

【极品模板】出品的一款功能强大、安全性高、调用简单、扩展灵活的响应式多语言企业网站管理系统。 产品主要功能如下: 01、支持多语言扩展(独立内容表,可一键复制中文版数据) 02、支持一键修改后台路径; 03、杜绝常见弱口令,内置多种参数过滤、有效防范常见XSS; 04、支持文件分片上传功能,实现大文件轻松上传; 05、支持一键获取微信公众号文章(保存文章的图片到本地服务器); 06、支持一键

下载

优化策略:构建反向映射字典

为了提高查询效率,我们可以采取一种预处理的策略:将原始的“制造商-模型列表”映射关系反转为“模型-制造商”的直接映射字典。这样,每次查找模型时,就可以利用字典O(1)(平均时间复杂度)的查找特性,大大提升效率。

目标数据结构: model_to_manufacturer_dict = {'ROG': 'ASUS', 'TUF': 'ASUS', 'Predator': 'ACER', 'Nitro': 'ACER', 'Legion': 'Lenovo'}

方法一:使用嵌套循环构建反向映射字典

我们可以通过遍历原始的manufacturer_dict,为每个模型创建一个指向其制造商的条目。

# 原始制造商字典
manufacturer_dict = {
    "ASUS": ["ROG", "TUF"],
    "ACER": ["Predator", "Nitro"],
    "Lenovo": ["Legion"]
}

# 使用嵌套循环构建模型到制造商的映射字典
model_to_manufacturer_dict_loop = {}
for manufacturer, models in manufacturer_dict.items():
    for model in models:
        model_to_manufacturer_dict_loop[model] = manufacturer

print("通过嵌套循环构建的映射字典:", model_to_manufacturer_dict_loop)
# 结果: {'ROG': 'ASUS', 'TUF': 'ASUS', 'Predator': 'ACER', 'Nitro': 'ACER', 'Legion': 'Lenovo'}

方法二:使用字典推导式构建反向映射字典(推荐)

Python的字典推导式提供了一种更简洁、更Pythonic的方式来完成上述操作。

# 原始制造商字典
manufacturer_dict = {
    "ASUS": ["ROG", "TUF"],
    "ACER": ["Predator", "Nitro"],
    "Lenovo": ["Legion"]
}

# 使用字典推导式构建模型到制造商的映射字典
model_to_manufacturer_dict_comprehension = {
    model: manufacturer
    for manufacturer, models in manufacturer_dict.items()
    for model in models
}

print("通过字典推导式构建的映射字典:", model_to_manufacturer_dict_comprehension)
# 结果: {'ROG': 'ASUS', 'TUF': 'ASUS', 'Predator': 'ACER', 'Nitro': 'ACER', 'Legion': 'Lenovo'}

利用反向映射字典进行高效查询

一旦我们构建了model_to_manufacturer_dict,就可以利用它来高效地生成所需的manufacturer_list。

model_name_list = ["Legion", "ROG", "Nitro", "TUF", "Predator", "Alienware"]

# 使用已构建的 model_to_manufacturer_dict 进行查询
# 假设我们使用字典推导式构建的字典
final_manufacturer_list = []
for model in model_name_list:
    # 使用 .get() 方法处理模型可能不存在的情况,提供一个默认值(如"Unknown")
    manufacturer = model_to_manufacturer_dict_comprehension.get(model, "Unknown")
    final_manufacturer_list.append(manufacturer)

print("高效查询结果:", final_manufacturer_list)
# 结果: ['Lenovo', 'ASUS', 'ACER', 'ASUS', 'ACER', 'Unknown']

或者,使用列表推导式可以使代码更加简洁:

final_manufacturer_list_comprehension = [
    model_to_manufacturer_dict_comprehension.get(model, "Unknown")
    for model in model_name_list
]

print("高效查询结果 (列表推导式):", final_manufacturer_list_comprehension)
# 结果: ['Lenovo', 'ASUS', 'ACER', 'ASUS', 'ACER', 'Unknown']

注意事项与总结

  1. 效率提升: 这种方法的关键在于将查找操作从O(N*M)(N为待查模型数,M为制造商字典条目数)优化为O(M_prep + N)(M_prep为预处理时间,N为待查模型数),其中字典查找平均为O(1)。当需要进行大量查询时,这种预处理的收益非常显著。
  2. 数据结构选择: Python的字典(dict)在键值对查找方面具有极高的效率,是解决此类映射问题的理想选择。
  3. 代码简洁性: 字典推导式和列表推导式是Python中处理此类数据转换的强大工具,能够以简洁、易读的方式表达复杂的逻辑。
  4. 错误处理: 在进行模型查找时,务必考虑模型可能不存在于反向映射字典中的情况。使用dict.get(key, default_value)方法可以优雅地处理这种情况,避免KeyError。
  5. 适用场景: 当原始数据以“一对多”形式存储,而实际需求是根据“多”中的单个元素反向查找其所属的“一”时,且查询频率较高,构建反向映射字典是最佳实践。

通过上述方法,我们不仅能够高效地完成多模型到单一制造商的映射任务,还能使代码更加健壮和易于维护。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

755

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

636

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

759

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

618

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1263

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

578

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

708

2023.08.11

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

2

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 1.5万人学习

Django 教程
Django 教程

共28课时 | 3.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号