全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

前言

字典也叫散列表,最大的特点是通过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 


相关文章: 微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  浅析上传头像示例及其注意事项  如何挑选高效建站主机与优质域名?  模具网站制作流程,如何找模具客户?  常州企业建站如何选择最佳模板?  北京企业网站设计制作公司,北京铁路集团官方网站?  广州营销型建站服务商推荐:技术优势与SEO优化解析  如何通过西部建站助手安装IIS服务器?  建站主机选哪种环境更利于SEO优化?  动图在线制作网站有哪些,滑动动图图集怎么做?  如何将凡科建站内容保存为本地文件?  建站主机如何安装配置?新手必看操作指南  如何构建满足综合性能需求的优质建站方案?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  网站按钮制作软件,如何实现网页中按钮的自动点击?  孙琪峥织梦建站教程如何优化数据库安全?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何快速启动建站代理加盟业务?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何在腾讯云免费申请建站?  5种Android数据存储方式汇总  平台云上自助建站如何快速打造专业网站?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  公司网站的制作公司,企业网站制作基本流程有哪些?  如何用搬瓦工VPS快速搭建个人网站?  建站主机与服务器功能差异如何区分?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  成都网站制作报价公司,成都工业用气开户费用?  网站制作模板下载什么软件,ppt模板免费下载网站?  为什么Go需要go mod文件_Go go mod文件作用说明  海南网站制作公司有哪些,海口网是哪家的?  ,怎么在广州志愿者网站注册?  建站之星安装提示数据库无法连接如何解决?  Swift开发中switch语句值绑定模式  如何快速查询网站的真实建站时间?  黑客如何利用漏洞与弱口令入侵网站服务器?  b2c电商网站制作流程,b2c水平综合的电商平台?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何在西部数码注册域名并快速搭建网站?  建站之星Pro快速搭建教程:模板选择与功能配置指南  安徽网站建设与外贸建站服务专业定制方案  如何在建站之星网店版论坛获取技术支持?  如何选择适合PHP云建站的开源框架?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  红河网站制作公司,红河事业单位身份证如何上传? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。