day 4
字典
字典必须是键值对:key: value pairs
字典无序!!!
key不可变,不能为列表等可变对象
create a dict
4 ways:
>>> a = {"name": 'Yuan Gao', 'age': 23}
>>> a
{'name': 'Yuan Gao', 'age': 23}
>>> b = dict([('name', 'Yuan Gao'), ('age', 23)])
>>> b
{'name': 'Yuan Gao', 'age': 23}
>>> c = dict( name = 'Yuan Gao', age = 23)
>>> c
{'name': 'Yuan Gao', 'age': 23}
# 注意是dictttttt!
>>> d = ['name', 'age']
>>> e = ['Yuan Gao', 23]
>>> f = dict(zip(d,e))
>>> f
{'name': 'Yuan Gao', 'age': 23}
# 创建值为空的字典
第一种: dict2 = {}
第二种: dict2 = dict()
>>> h = dict.fromkeys(['name', 'age'])
>>> h
{'name': None, 'age': None}
访问与遍历
>>> a = {"name": 'Yuan Gao', 'age': 23}
>>> a['name'] # key存在则返回value,不存在则报错
'Yuan Gao'
# get函数: xxx.get(key, 默认值),如当前查找的key不存在则返回第二个参数即默认值,如果省略第二个参数,则返回None。
>>> a.get('job') # if there is not key named 'job' then return 'not exist'
'not exsit'
>>> a.get('job',404) # if there is not key named 'job' then return 'not exist'
404
# 遍历
>>> a.items() # 遍历
dict_items([('name', 'Yuan Gao'), ('age', 23)]) # 返回所有的键值对
>>> a.keys() # 所有keys
dict_keys(['name', 'age']) #返回左右的keys
>>> a.values()
dict_values(['Yuan Gao', 23]) # 返回所有的values
>>> len(a) # number of key:value pairs
2
>>> 'name' in a # only for keys!!!
True
>>> 'Yuan Gao' in a
False
查找values可以用 ‘Yuan Gao’ in a.values()
添加与删除
新增或修改:
dict1['key'] = 'value'
>>> b = dict([('job','student')])
>>> a.update(b)
>>> a
{'name': 'Yuan Gao', 'age': 23, 'job': 'student'}
删除指定键值对 del dict1['key'],key不存在则报错
>>> del(a['age'])
>>> a
{'name': 'Yuan Gao', 'job': 'student'}
>>> c = a.pop('name')
>>> c
'Yuan Gao' # 返回对应值对象
>>> a.clear()
>>> a
{} # delete all
popitem 随机删除
序列解包
>>> x,y,z = 1,2,3
>>> x
1
>>> [a,b,c] = [5,6,7]
>>> b
6
>>> s = {"name": 'Yuan Gao', 'age': 23}
>>> e,f = s
>>> f
'age'
>>> g,h = s.values()
>>> g
'Yuan Gao'
>>> m,n = s.items()
>>> m
('name', 'Yuan Gao')
>>> m[1]
'Yuan Gao'
字典的循环遍历
for value in dict.values():
print(value)
将得到的数据进行拆包
for key,value in dict1.items():
print(f'{key} = {value}')
集合
不可重复!
集合也没有顺序,和dict一样,所以不像列表一样,集合没有下标
空集set()
不能用{},{}只能创建空字典
创建集合:
>>> s3 = set('adehiuf')
>>> print(s3)
{'h', 'e', 'i', 'u', 'f', 'a', 'd'}
集合增加数据:
xxx.add()
xxx.update()
>>> a = {3,5,7}
>>> a
{3, 5, 7}
# 集合增加数据,只能增加一个数据
# 如果增加已经有的数据,则不做任何的新数据到原集合
>>> a.add(9) # 增加到任意位置
>>> a
{9, 3, 5, 7}
# 如果要增加序列,则用xxx.update()
>>>a = {3,5,7}
>>>a.update([10, 20, 30])
>>>print(a)
{3, 5, 7, 10, 20, 30}
# 将列表变为集合
>>> b = [1,2,8]
>>> c = set(b)
>>> c
{8, 1, 2}
删除数据
# 删除 xxx.remove() / xxx.discard(),用法一样,但是discard不报错如果数据不存在,remove则报错
>>> c.remove(2)
>>> c
{8, 1}
随机删除1个数据:
xxx.pop()
>>> clear(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'clear' is not defined
>>> c
{8, 1}
>>> c.clear()
>>> c
set()
判断数据是否存在:
in
not in
返回True or False