python利用拉链法实现字典方法示例

发布时间 - 2026-01-11 00:21:45    点击率:

前言

字典也叫散列表,最大的特点是通过key来查找其对应的值其时间复杂度是O(1),下面这篇文章就来给大家介绍介绍python利用拉链法实现字典的方法。

在Python中怎样用列表实现字典?

用列表实现字典最大的问题就是解决hash冲突,如果在列表中通过计算不同的key得到相同的相同了位置,这时候应该怎么办?

最简单的办法就是使用拉链法.

拉链法:就是在一个列表中每个位置再添加一个列表,这样就算是有hash冲突也能够存储进去,当选取的hash函数足够好,

num的数足够大,就能够保证列表中的每一个列表里面只有一个元素。根据key计算的元素所在的位置,然后来取值就能达

到O(1)的时间。

方法示例

class MyDict:
 def __init__(self, num=100): # 指定列表大小
  self._num = num
  self._lst = []
  for _ in range(self._num):
   self._lst.append([])

 def update(self, key, value): # 添加 key-value
  key_index = hash(key) % self._num
  for i, (k, v) in enumerate(self._lst[key_index]):
   if key == k:
    self._lst[key_index][i] = [key, value]
    break
  else:
   self._lst[key_index].append([key, value])

 def get(self, key): # 根据指定的 key 弹出值
  key_index = hash(key) % self._num
  for k, v in self._lst[key_index]:
   if k == key:
    return v
  else:
   raise KeyError('No such {} key'.format(key))

 def pop(self, key): # 根据 key 弹出元素 并且删除
  key_index = hash(key) % self._num
  for i, (k, v) in enumerate(self._lst[key_index]):
   if k == key:
    result = v
    self._lst.pop(i)
    return result
  else:
   raise KeyError('No such {} key'.format(key))

 def __getitem__(self, key): # 可以通过下标来取值
  key_index = hash(key) % self._num
  for k, v in self._lst[key_index]:
   if k == key:
    return v
  else:
   raise KeyError('No such {} key'.format(key))

 def keys(self): # 取得所有的key
  for index in range(self._num):
   for k, v in self._lst[index]:
    yield k

 def values(self): # 取得所有的 value
  for index in range(self._num):
   for k, v in self._lst[index]:
    yield v

 def items(self): # 取得所有的条目
  for index in range(self._num):
   for item in self._lst[index]:
    yield item

通过key查到的时间,可见下图

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# python  # 字典实现  # 字典  # python3  # Python 字典(Dictionary)操作详解  # python中的字典详细介绍  # python两种遍历字典(dict)的方法比较  # python提取字典key列表的方法  # python通过字典dict判断指定键值是否存在的方法  # Python中字典和JSON互转操作实例  # python 将字符串转换成字典dict  # Python中使用item()方法遍历字典的例子  # python中将字典转换成其json字符串  # python创建和使用字典实例详解  # 弹出  # 这篇文章  # 列表中  # 是有  # 就能  # 可以通过  # 给大家  # 只有一个  # 就来  # 谢谢大家  # 最简单  # 也叫  # 再添  # 这时候  # 就是在  # 特点是  # 有疑问  # num  # key  # strong 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JS碰撞运动实现方法详解  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何做网站制作流程,*游戏网站怎么搭建?  如何在阿里云购买域名并搭建网站?  Laravel如何处理表单验证?(Requests代码示例)  高性价比服务器租赁——企业级配置与24小时运维服务  Laravel如何使用模型观察者?(Observer代码示例)  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  Bootstrap整体框架之CSS12栅格系统  郑州企业网站制作公司,郑州招聘网站有哪些?  音乐网站服务器如何优化API响应速度?  高防服务器租用首荐平台,企业级优惠套餐快速部署  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  java中使用zxing批量生成二维码立牌  详解Android图表 MPAndroidChart折线图  如何正确选择百度移动适配建站域名?  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Linux后台任务运行方法_nohup与&使用技巧【技巧】  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  千库网官网入口推荐 千库网设计创意平台入口  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  英语简历制作免费网站推荐,如何将简历翻译成英文?  制作公司内部网站有哪些,内网如何建网站?  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  linux写shell需要注意的问题(必看)  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  Laravel如何使用Collections进行数据处理?(实用方法示例)  如何在云指建站中生成FTP站点?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  长沙做网站要多少钱,长沙国安网络怎么样?  如何续费美橙建站之星域名及服务?  WordPress 子目录安装中正确处理脚本路径的完整指南  如何快速查询域名建站关键信息?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  EditPlus 正则表达式 实战(3)  Laravel怎么上传文件_Laravel图片上传及存储配置  简历没回改:利用AI润色让你的文字更专业  如何快速启动建站代理加盟业务?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  ,交易猫的商品怎么发布到网站上去?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  javascript中的数组方法有哪些_如何利用数组方法简化数据处理