Python内置了字典:dict,全称dictionary,无序的,使用键值(key-value)存储,具有极快的查找速度。 原理:要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。 第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字,无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。
dict的操作包括初始化、重新赋值、添加、取值、删除等
#!/usr/bin/env python#-*- coding:utf-8 -*-# 例:根据学号查找对应的成绩.dict的速度几乎是list的两倍# 初始化d1 = {101:95,102:90,104:80}print u'101对应的value是:', d1[101]# 将数据存入dict除了初始化外还可以通过赋值的方式d1[108] = 92print u'd1中存储的key-value是:', d1 # 一个key只能对应一个value,所以key对应的是最后一个有效的valued1[109] = 78d1[109] = 87print u'd1中存储的key-value是:', d1# 取value时,如果key存在,返回对应的value,如果key不存在,dict就会报错。# 为避免发生key不存在的错误,可以1:通过in判断key是否存在,返回True/False,2:利用get方法的返回值判断print u'102对应的value是:', d1[102]# print u'110对应的value是:', d1[110]print u'key=110是否与d1:', 110 in d1 # 没找到则返回Falseprint d1.get(110) # 没找到则返回Noneprint d1.get(110,-1) # 没找到则返回-1# 删除key-value,用pop(key)方法,对应的value也会被删除# dict内部存放的顺序和key放入的顺序是没有关系的print u'd1中存储的key-value是:', d1print u'删除d1中key=108的key-value对:108-', d1.pop(108)print u'd1中存储的key-value是:', d1
运行效果:
★★★值得注意的是:
dict的key必须是不可变对象。因为dict根据key来计算value的存储位置,如果相同的key得出的结果不同,那dict内部就完全混乱了。
这种key计算位置的算法称为哈希算法(Hash)。要保证hash的正确性,作为key的对象就不能变。 在Python中,字符串、整数等都是不可变的,因此,可作为key。而list是可变的,就不能作为key★★★总结
和list比较,dict有以下几个特点: 1. 查找和插入的速度极快,不会随着key的增加而增加; 2. 需要占用大量的内存,内存浪费多。 而list相反: 1. 查找和插入的时间随着元素的增加而增加; 2. 占用空间小,浪费内存很少。 所以,dict是用空间来换取时间的一种方法。