dict和set的使用

来源:互联网 发布:linux 内核下载 编辑:程序博客网 时间:2024/06/06 19:21

核心
dict和set的介绍和使用

dict
python内置了字典:dict的支持,dict全称dictionary,在其他语言中也成为map,使用键-值(key-value)存储,具有极快的查询速度,如果用list实现,需要两个list

name=['spark','hadoop','flume']model=['scala','java','scala']

给定一个名字,要查找对应的语言,就先要在name中找到对应的位置,再从model去取出对应的语言,list越长,耗时越长。如果用dict实现,只需要一个”名字-语言”的对照表,直接根据名字查找成绩,无论这个表有多大,查找的速度都不会变慢,用python写一个dict如下

>>> name={'spark':'scala','hadoop':'java','flume':'scala'}>>> name['spark']'scala'

为什么dict查找速度这么快?这个原理和字典的查找原理是一样的,如果我们不用部首等查找直接从第一页开始往后面找,这个也是可以找到的,但是随着字数越来越多查找也愈来愈慢。这个是list方式,但是dict方式是先在字典的索引里面查到这个字对应的页面,然后直接翻到页面找到这个字,无论要找的字在哪里,这种查找速度都非常快,不会随着字典大小的增加而变慢。

把数据放入dict的方法,除了初始化以外还有赋值这种情况

>>> name['kafka']='scala'>>> name['kafka']'scala'

我们也可以通过赋值的语句修改里面某个值

>>> name['flume']='java'>>> name['flume']'java'

如果是key在这个dict里面不存在的情况那么python会抛出一个异常

>>> name['storm']Traceback (most recent call last):  File "<stdin>", line 1, in <module>KeyError: 'storm'

为了解决这个异常,我们可以考虑下面几种方法,判断这个key存在与否,另外一种如果不存在返回一个什么样的值

>>> 'storm' in nameFalse>>> name.get('storm')>>> name.get('storm',-1)-1

注意:dict内部存放的顺序和key放入的顺序是没有关系的。
和list比较,dict有以下的几个特点
1、查找和插入的速度快,不会随着key的增加而增加
2、需要占用大量的内存,内存浪费多
而list相反:
1、查找和插入时间随着元素的增加而增加
2、占用空间小,浪费内存很少
所以dict是用空间来换取时间的一种方法

set
set和dict类似,也是一组key的集合,但不存储value,由于key不能重复,所以,在set中,没有重复的key,要创建一个set,需要提供一个list作为输入集合:

>>> s=set([1,2,3])>>> sset([1, 2, 3])

注意,传入的参数[1,2,3]是一个list,而显示的set([1,2,3])只是告诉你这个set内部有1,2,3这3个元素,显示的[]不表示这是一个list,重复元素在set中自动被过滤:

>>> s=set([1,2,3,2,3])>>> sset([1, 2, 3])

通过add(key)方法可以添加元素到set中,可以重复添加,但是不会有效果

>>> s.add(4)>>> sset([1, 2, 3, 4])>>> s.add(3)>>> sset([1, 2, 3, 4])

可以通过remove(key)方法可以删除元素

>>> s.remove(4)>>> sset([1, 2, 3])

set可以看成数学意义上的无序和无重复元素的集合,因此两个set可以做数学意义上的交集、并集操作

>>> s1=set([1,2,3])>>> s2=set([4,2,3])>>> s1 &s2set([2, 3])>>> s1 |s2set([1, 2, 3, 4])
0 0
原创粉丝点击