2019.7.20 字典和集合(dict与set)

1、字典/dict

dict全称dictionary,使用键-值(Key-Value)存储方式,可以加快查找速度

特点:用{}包括的一组Key-Value元素,Key-Value用':'连接

举例:D={'Michael':95,'Bob':70,'Tracy':85}是一个字典对象

通过对象名[Key]的方式可以迅速访问Key所对应的Value

D['Michael']=95

>>> D={'Michael':95,'Bob':80,'Tracy':85}
>>> D['Michael']
95

给定一个Key之后,dict会在内部直接计算出Key所对应的'页码',而不是从头到尾依次查一遍,所以速度比列表快

 

在字典中添加元素,可以直接通过dict[Key]=Value的方式进行,因为不按顺序读取,所以存储位置对读取速度没有影响

如:

>>> D['Leo']=89
>>> D['Leo']
89

 

注意:一个Key只能对应一个Value,因此后来的Value给之前的Key,会覆盖该Key本来对应的Value

 

如果Key不存在的话,就会出现KeyError

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

 

检查Key是否存在的方式有两种:

1、in

>>> 'Ki' in D
False

2、dict提供的get方法,如果Key不存在,将会返回None或者自己指定的值

>>> D.get('Ki',0)
0

>>> A=D.get('Ki')
>>> print A
None

 

删除Key:dict.pop(Key)

>>> D.pop('Bob')
80
>>> D
{'Michael': 95, 'Tracy': 85, 'Leo': 89}

DIct与List的区别:Dict查找速度快,占用空间大,是用空间换取时间,而List则相反

 

注意:dict中的Key元素必须是不可变的,比如字符串,整数等,而List是可变的,因此不能作为Key

通过Key找Value的算法叫Hash算法

 

2、集合/Set

一组Key的集合,但不存在Value。Set中的Key不能重复,因此Set中不存在重复的Key

集合通过方法set([])构建,[]表示传入的对象是List

重复元素在Set构建时自动被过滤,如:

>>> S=set([1, 1, 1, 2, 2, 3, 5, 6, 6])
>>> S
set([1, 2, 3, 5, 6])

对set可以进行的操作:

添加Key:S.add(Key)

>>> S.add(4)
>>> S
set([1, 2, 3, 4, 5, 6])

 

移除Key:S.remove(Key)

>>> S.remove(3)
>>> S
set([1, 2, 4, 5, 6])

 

两个集合间可以做并(|)交(&)集运算

>>> S2=set([1,2,3,7])
>>> S2
set([1, 2, 3, 7])

交集&
>>> S3=S&S2 >>> S3 set([1, 2])

并集|
>>> S4=S|S2 >>> S4 set([1, 2, 3, 4, 5, 6, 7]

Set与Dict的唯一区别就是Set中的Key没有对应的Value,在可变对象方面上,Set中的Key同样不能是可变对象如list

 

最常用的Key类型是字符串str

 

3、可变对象与不可变对象

对于可变对象如List进行操作时,List中的内容是会发生变化的,如:

>>> L=['D','A','F']
>>> L
['D', 'A', 'F']
>>> L.sort()
>>> L
['A', 'D', 'F']

而对于不可变对象如字符串str,进行如下操作时:

>>> s='aef'
>>> s.replace('a','A')
'Aef'
>>> s
'aef'

可以理解为,replace()方法创建了一个新的字符串并对其进行修改,原字符串a并没有发生改变,原字符串和新字符串具有不同的地址

 

posted @ 2019-07-20 12:04  ShineLe  阅读(355)  评论(0)    收藏  举报