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

Python中高效存储与检索表格数据的最优方案(禁用第三方库)

Python高效存储与检索产品数据的最优方案

问题背景

需要存储包含「产品名称(Product)、品类(Category)、原价(Original Price)、折扣率(Discount(%))」的产品数据,当前采用分品类列表存字典的方式,但后续要频繁做类似「若产品为NOTEBOOK则执行对应操作」的查询,要求不使用第三方库,求最高效的存储与检索方式。

当前方案的不足

你现在分品类用列表存字典的方式,要找某个产品时,要么得先知道品类再遍历对应列表,要么就得遍历所有品类的列表,时间复杂度是O(n),数据量越大检索越慢,完全满足不了高效查询的需求。

最优方案:利用字典的O(1)查找特性

Python里字典的键查找是哈希实现的,时间复杂度为O(1),是原生结构里最快的检索方式,推荐两种适配不同需求的实现:


1. 直接用产品名称作为顶层键的字典(优先推荐)

如果你的核心需求是快速根据产品名称定位数据,直接把每个产品的详情字典以产品名称为键,存在一个顶层大字典里,一步就能拿到目标数据。

代码示例:

# 存储结构
products = {
    "NOTEBOOK": {"Category": "STATIONARY", "Original Price": 200, "Discount(%)": 20},
    "PENS": {"Category": "STATIONARY", "Original Price": 300, "Discount(%)": 10},
    "MARKERS": {"Category": "STATIONARY", "Original Price": 500, "Discount(%)": 5},
    "TSHIRT": {"Category": "CLOTHING", "Original Price": 1000, "Discount(%)": 10},
    "JACKET": {"Category": "CLOTHING", "Original Price": 2000, "Discount(%)": 5},
    "CAP": {"Category": "CLOTHING", "Original Price": 500, "Discount(%)": 20}
}

# 检索示例:查找NOTEBOOK并执行操作
if "NOTEBOOK" in products:
    notebook_info = products["NOTEBOOK"]
    # 比如计算折后价
    final_price = notebook_info["Original Price"] * (1 - notebook_info["Discount(%)"] / 100)
    print(f"NOTEBOOK折后价:{final_price}")

优点:

  • 检索速度最快,无论数据量多大,找单个产品都是常数时间
  • 代码简洁,直接通过键访问,无需遍历

注意:确保产品名称唯一,因为字典的键不能重复;如果有同名产品,可以把对应的值改成列表,存储多个同名称的产品数据。


2. 保留品类分类的嵌套字典(需兼顾品类分组时用)

如果除了按产品名称查询,还需要按品类批量操作,可以用两层嵌套字典:外层键是品类名称,内层键是产品名称,同时额外维护一个产品到品类的映射字典,保证不知道品类时也能快速定位。

代码示例:

# 按品类分组的存储结构
products_by_category = {
    "STATIONARY": {
        "NOTEBOOK": {"Original Price": 200, "Discount(%)": 20},
        "PENS": {"Original Price": 300, "Discount(%)": 10},
        "MARKERS": {"Original Price": 500, "Discount(%)": 5}
    },
    "CLOTHING": {
        "TSHIRT": {"Original Price": 1000, "Discount(%)": 10},
        "JACKET": {"Original Price": 2000, "Discount(%)": 5},
        "CAP": {"Original Price": 500, "Discount(%)": 20}
    }
}

# 额外维护产品到品类的映射,用于快速定位
product_to_category = {
    "NOTEBOOK": "STATIONARY",
    "PENS": "STATIONARY",
    "MARKERS": "STATIONARY",
    "TSHIRT": "CLOTHING",
    "JACKET": "CLOTHING",
    "CAP": "CLOTHING"
}

# 检索示例:找NOTEBOOK
if "NOTEBOOK" in product_to_category:
    category = product_to_category["NOTEBOOK"]
    notebook_info = products_by_category[category]["NOTEBOOK"]
    # 执行对应操作

优点:

  • 既可以按品类批量处理数据,也能保证按产品名称查询的效率
  • 额外的映射字典让不知道品类时也能O(1)定位产品

总结

如果核心需求是快速根据产品名称执行操作,优先选第一种方案;如果需要兼顾品类分组管理,就用第二种嵌套字典+映射的组合,两种方案都能把检索效率拉满,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:05:20