You need to enable JavaScript to run this app. Python用for循环向自建哈希表插入CSV键值对时打印内存地址而非值
优惠活动
大模型
产品
解决方案
定价
更多

Python用for循环向自建哈希表插入CSV键值对时打印内存地址而非值

问题根因与修复

打印对象显示内存地址的核心原因

你当前的输出场景不会触发已经写好的__str__方法:

  • 代码最后执行print(hashMap.table)时,打印的是哈希表内部的列表结构
  • Python的列表在被打印时,会自动调用列表内每个元素的__repr__方法完成内容渲染,完全不会触发元素的__str__方法
  • 你只实现了__str__,没有实现__repr__,Python对自定义类默认的__repr__就是输出类名+内存地址的形式,这就是你看到内存地址的直接来源

代码中的其他隐藏bug

  • 属性名不匹配:DeliveryInfo类的__init__方法里,邮编属性定义为self.zipc = zipc,但__str__方法拼接时写的是self.zip,一旦实际触发__str__逻辑,会直接抛出属性不存在的报错,说明你之前的代码根本没走到__str__的执行分支
  • CSV读取逻辑错误:loadDeliveryInfo函数里的with上下文管理器缩进错误——只把csv.reader的实例化放在了with块内,后续逐行读取的循环写在了with块外面。等循环执行时,文件句柄已经被with上下文自动关闭,根本读不到完整的CSV行数据

具体修复步骤

  1. 修正CSV读取的缩进,把逐行读取、创建DeliveryInfo对象、插入哈希表的所有逻辑全部移到with块内部,保证文件打开期间完成所有读取操作
  2. 修正__str__方法里的笔误,把self.zip改为self.zipc,和__init__里的属性定义对齐
  3. 给DeliveryInfo类补充实现__repr__方法,让类在被列表、元组这类容器包裹时,也能输出可读内容,复用__str__的拼接逻辑即可,不需要重复写代码
  4. 验证效果时,可以通过哈希表的取值接口单独取出存储的对象打印,确认输出正常,不要直接打印哈希表的内部数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 09:15:03