您的位置:首页 > 编程语言 > Python开发

Python基础5——dict和set

2018-03-31 18:38 330 查看

dict

Python内置了字典:dict的支持,dict全程dictionary,在其他语言中称为map,只用键-值(key-value)存储,具有极快的查找速度。>>> d = {'jeff':25,'maomao':24,'yuan':26}
>>> d['jeff']
25把数据放入dict的方法,除了初始化指定外,还可以通过key放入:>>> d['yuanbao']=18
>>> d
{'yuan': 26, 'jeff': 25, 'yuanbao': 18, 'maomao': 24}
>>> d['yuanbao']
18
由于一个key只能对应一个value,所以多次对一个key放入value,后面的值会把前面的值冲掉
:>>> d
{'yuan': 26, 'jeff': 25, 'yuanbao': 18, 'maomao': 24}
>>> d['yuan']=18
>>> d
{'yuan': 18, 'jeff': 25, 'yuanbao': 18, 'maomao': 24}如果key不存在,dict就会报错:>>> d['zhou']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'zhou'要避免key不存在的错误,有两种方法,一是通过in判断key是否存在:>>> 'zhou' in d
False二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:>>> d.get('zhou')
>>> d.get('zhou',-1)
-1注意:返回None的时候Python的交互式命令不显示结果。
要删除一个key,用pop(key)方法,对应的value也会从dict中删除:>>> d.pop('yuan')
18
>>> d
{'jeff': 25, 'yuanbao': 18, 'maomao': 24}注意:dict内部存放的顺序和key放入的顺序是没有关系的。
和list比较,dict有以下几个特点:
1、查找和插入的速度极快,不会随着key的增加而增加;
2、需要占用大量的内存,内存浪费多。
而list相反:
1、查找和插入的时间随着元素的增加而增加;
2、占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象

set

set和dict类似,也是一组key的集合,但不存储valus。由于key不能重复,所以,在set中没有重复的key。
要创建一个set,需要提供一个list作为输入集合:>>> s = set([1,2,3,4,5,6,6])
>>> s
{1, 2, 3, 4, 5, 6}重复元素在set中自动被过滤。
通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:>>> s.add(7)
>>> s.add(8)
>>> s.add(8)
>>> s.add(8)
>>> s
{1, 2, 3, 4, 5, 6, 7, 8}通过remove(key)方法可以删除元素:>>> s.remove(1)
>>> s
{2, 3, 4, 5, 6, 7, 8}set可以看成数学意义上的无序和无重复元素的集合,因此两个set可以做数学意义上的交集、并集等操作:>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4,5])
>>> s1 & s2    #交集
{2, 3}
>>> s1 | s2    #并集
{1, 2, 3, 4, 5}
>>> s1 ^ s2    #异或
{1, 4, 5}
set和dict唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部”不会有重复元素“。试试把list放入set,看看是否会报错。
>>> s = set([1,2,[1,2,3]])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
再议不可变对象:str是不可变对象,而list是可变对象。对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,比如:>>> a = [1,5,2,4]
>>> a.sort()
>>> a
[1, 2, 4, 5]
>>> a = ['a','q','v','c']
>>> a.sort()
>>> a
['a', 'c', 'q', 'v']
而对于不可变比如对象,比如str,对str进行操作呢:>>> s = 'zhouboyuan'
>>> s.replace('z','Z')
'Zhouboyuan'
>>> s
'zhouboyuan'虽然字符串有个replace()方法,也确实变出了‘Zhouboyuan’,但变量s最后仍然是zhouboyuan。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: