Python 字典dict 集合set
字典dict
Python内置字典,通过key-value进行存储,字典是无序的,拓展hash
names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]
给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。
用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢
>>> d = {'aa':1,'bb':2,'cc':3}
>>> d['aa'] # 可以直接根据名字来查找
1
为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。
在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字。无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。
key-value的存储,是在放进去的时候必须通过key的值算出value的存放位置,这样拿的时候也是根据value的值去内存中拿
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:
>>> d
{'aa': 1, 'bb': 2, 'cc': 3}
>>> d['hh']= 88
>>> d
{'aa': 1, 'bb': 2, 'cc': 3, 'hh': 88}
一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
>>> d['lal'] = 88
>>> d
{'aa': 1, 'bb': 2, 'cc': 3, 'hh': 88, 'lal': 88}
如果key不存在,dict就会报错:
避免key不存在的错误,通过in判断key是否存在
1.
>>> d
{'aa': 1, 'bb': 2, 'cc': 3, 'hh': 88, 'lal': 88}
>>> 'in' in d
False
>>> 'cc' in d
True
get()
>>> d.get('hahah') # key不存在 ,返回None 在命令行中None是不显示的
>>> d.get('hahah',-1) # 可以自定义返回值 -1
>>> d.get('hh') #key 存在,返回value
88
增加字典元素两种方法
1.
>>> dict1 = {1:223}
>>> dict1[1] = 'ahah'
- setdefault
>>> dict1.setdefault(2,'hello')
'hello'
>>> dict1
{1: 'ahah', 2: 'hello'}
>>>
删除Python字典
>>> dict1
{1: 'ahah', '1': 233234, 2: 'hello'}
>>> del dict1[1] # 用的是方括号 删除指定的key
>>> dict1
{'1': 233234, 2: 'hello'}
>>> del dict1[2]
>>> dict1
{'1': 233234}
>>> dict1.pop('1') # 用的pop()
233234
>>> dict1
{}
>>>
清空字典
dict1.clear()
删除字典对象
del dict1
集合set
set同字典相比,只有key,没有value.