You need to enable JavaScript to run this app. Python中如何将CSV文件数据添加至自定义Hashtable中?
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将CSV文件数据添加至自定义Hashtable中?

自定义Hashtable存入CSV数据故障排查与实现方案

常见问题根因

  • Hashtable实例作用域错误
    不要在CSV读取循环内重复初始化Hashtable实例,也不要在插入和查询场景下使用不同的实例。全局仅需初始化1次Hashtable,插入、查询共用同一个实例对象。
    错误示例:
    for row in package_data:
        h = Hashtable() # 每次循环新建实例,之前插入的数据全部丢失
        h.insert(row[0], row[1:])
    
    正确示例:
    h = Hashtable() # 循环外初始化1次即可
    for row in package_data:
        h.insert(row[0], row[1:])
    
  • key类型不匹配
    csv.reader读取到的所有字段默认都是字符串类型,如果你的Hashtable插入时用字符串类型作为key,查询时用整数类型作为key,就会触发==比对失败,返回None。
    统一类型的实现示例(以将CSV第一列的包ID转为整数作为key为例):
    import csv
    h = Hashtable()
    with open('WGUPS.csv') as file:
        package_data = csv.reader(file, delimiter=',')
        for row in package_data:
            # 第一列转为整数作为key,剩余字段作为value
            key = int(row[0])
            value = row[1:]
            h.insert(key, value)
    # 查询时也必须使用整数类型的key
    print(h.get(1)) # 正确
    # print(h.get("1")) # 错误,类型不匹配会查询不到
    
  • Hashtable初始化异常
    确认你的Hashtable构造方法已经预生成了指定长度的空桶列表,如果self.table初始化时空长度为0,会导致取模运算异常,数据无法正确插入。
    完整可运行的Hashtable实现参考:
    class Hashtable:
        def __init__(self, bucket_num=40): # 桶数量可根据CSV数据量调整
            self.table = [[] for _ in range(bucket_num)]
        
        # 你的insert方法
        def insert(self, key, value):
            bucket = hash(key) % len(self.table)
            bucket_list = self.table[bucket]
            for kv in bucket_list:
                if kv[0] == key:
                    kv[1] = value
                    return True
            bucket_list.append([key, value])
            return True
        
        # 配套查询方法
        def get(self, key):
            bucket = hash(key) % len(self.table)
            bucket_list = self.table[bucket]
            for kv in bucket_list:
                if kv[0] == key:
                    return kv[1]
            return None # 只有查询不到时才会返回None
    

排查步骤

  1. 先脱离CSV测试Hashtable功能:手动调用insert插入指定key、value,再调用get查询对应key,确认基础功能正常。
  2. 插入CSV数据时打印当前插入的key、value及对应类型,和后续查询时的key、类型做比对,确认完全一致。
  3. 打印插入完成后Hashtable的self.table属性,确认桶列表中已经存在对应插入的键值对数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 20:45:02