Python 3中如何实现多值映射至单值并支持反向查询?
在Python 3中实现多值到单值的映射
下面分别介绍用字典和元组实现的方法,以及最优方案:
一、字典实现(推荐)
字典是Python中做映射最直接的工具,查询效率为O(1),操作也最简洁。
手动构建映射字典
直接把每个子项作为键,对应的分类作为值:
category_map = { 'Mango': 'Fruit', 'Banana': 'Fruit', 'Apple': 'Fruit', 'Car': 'Vehicle', 'Bus': 'Vehicle', 'Truck': 'Vehicle', 'Berlin': 'Place', 'NewYork': 'Place' } # 查询示例 print(category_map.get('Truck')) # 输出: Vehicle # 处理不存在的键,返回默认值避免报错 print(category_map.get('Dog', 'Unknown')) # 输出: Unknown
从原始分类数据动态生成
如果你的原始数据是「分类对应多个子项」的结构,可以自动生成反向映射字典,避免手动重复输入:
# 原始分类数据 original_categories = { 'Fruit': ['Mango', 'Banana', 'Apple'], 'Vehicle': ['Car', 'Bus', 'Truck'], 'Place': ['Berlin', 'NewYork'] } # 生成反向映射 category_map = {} for cat, items in original_categories.items(): for item in items: category_map[item] = cat # 查询 print(category_map['Apple']) # 输出: Fruit
二、元组列表实现
用包含(子项,分类)的元组列表来存储,查询时遍历列表匹配:
category_tuples = [ ('Mango', 'Fruit'), ('Banana', 'Fruit'), ('Apple', 'Fruit'), ('Car', 'Vehicle'), ('Bus', 'Vehicle'), ('Truck', 'Vehicle'), ('Berlin', 'Place'), ('NewYork', 'Place') ] def get_category(item): for i, cat in category_tuples: if i == item: return cat return 'Unknown' # 查询示例 print(get_category('Truck')) # 输出: Vehicle
最优实现方式
字典是绝对的最优选择:
- 字典的查询操作是O(1)时间复杂度,数据量越大,对比元组列表的O(n)遍历效率优势越明显;
- 内置的
get()方法可以优雅处理不存在的键,避免抛出KeyError; - 代码更简洁,维护和扩展也更方便。
内容的提问来源于stack exchange,提问作者Abhijit Mondal Abhi
相关产品推荐
相关产品推荐

