全网整合营销服务商

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

免费咨询热线: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 


相关文章: 网站按钮制作软件,如何实现网页中按钮的自动点击?  油猴 教程,油猴搜脚本为什么会网页无法显示?  七夕网站制作视频,七夕大促活动怎么报名?  如何通过VPS搭建网站快速盈利?  已有域名和空间,如何快速搭建网站?  网站制作新手教程,新手建设一个网站需要注意些什么?  建站主机解析:虚拟主机配置与服务器选择指南  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  如何彻底删除建站之星生成的Banner?  如何选择最佳自助建站系统?快速指南解析优劣  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何快速搭建响应式可视化网站?  公司网站的制作公司,企业网站制作基本流程有哪些?  网页设计与网站制作内容,怎样注册网站?  Python文件管理规范_工程实践说明【指导】  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  建站主机是什么?如何选择适合的建站主机?  如何用花生壳三步快速搭建专属网站?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  定制建站哪家更专业可靠?推荐榜单揭晓  如何快速打造个性化非模板自助建站?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在阿里云高效完成企业建站全流程?  如何快速搭建个人网站并优化SEO?  html制作网站的步骤有哪些,iapp如何添加网页?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  海南网站制作公司有哪些,海口网是哪家的?  行程制作网站有哪些,第三方机票电子行程单怎么开?  如何高效搭建专业期货交易平台网站?  如何快速搭建自助建站会员专属系统?  建站之星展会模板:智能建站与自助搭建高效解决方案  建站之星安全性能如何?防护体系能否抵御黑客入侵?  如何用低价快速搭建高质量网站?  如何快速登录WAP自助建站平台?  ,网页ppt怎么弄成自己的ppt?  实例解析Array和String方法  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  建站之星如何实现五合一智能建站与营销推广?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  常州自助建站工具推荐:低成本搭建与模板选择技巧  山东网站制作公司有哪些,山东大源集团官网?  模具网站制作流程,如何找模具客户?  黑客入侵网站服务器的常见手法有哪些?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办? 

您的项目需求

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