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


Posted in Python onMarch 25, 2017

前言

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

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

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

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

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

拉链法:就是在一个列表中每个位置再添加一个列表,这样就算是有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利用拉链法实现字典方法示例

总结

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

Python 相关文章推荐
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
django文档学习之applications使用详解
Jan 29 Python
Python爬虫实战:分析《战狼2》豆瓣影评
Mar 26 Python
python发送邮件脚本
May 22 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
Python3.4 tkinter,PIL图片转换
Jun 21 Python
python中用logging实现日志滚动和过期日志删除功能
Aug 20 Python
python同时替换多个字符串方法示例
Sep 17 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
jupyter 导入csv文件方式
Apr 21 Python
学点简单的Django之第一个Django程序的实现
Feb 24 Python
python3实现ftp服务功能(服务端 For Linux)
Mar 24 #Python
python3实现ftp服务功能(客户端)
Mar 24 #Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
Mar 24 #Python
python 类详解及简单实例
Mar 24 #Python
Python类的动态修改的实例方法
Mar 24 #Python
Python操作Excel之xlsx文件
Mar 24 #Python
解决uWSGI的编码问题详解
Mar 24 #Python
You might like
PHP封装的字符串加密解密函数
2015/12/18 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
newxtree.js代码
2007/03/13 Javascript
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
JS前端加密算法示例
2016/12/22 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
2020/08/08 Javascript
Python脚本在Appium库上对移动应用实现自动化测试
2015/04/17 Python
简单介绍Python中的JSON使用
2015/04/28 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
python 弧度与角度互转实例
2020/04/15 Python
python获取整个网页源码的方法
2020/08/03 Python
Python如何急速下载第三方库详解
2020/11/02 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
纪检干部先进事迹材料
2014/08/23 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书
教你怎么用python selenium实现自动化测试
2021/05/27 Python
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫