- 2. 常用的序列结构
- 2.4字典
- 字典的创建
- 字典元素的访问
- 添加、修改、删除
- 序列解包
- 总结
- 2.5 集合
- 创建 & 删除
- 相关操作
- 2.4字典
- 是 键值对 的 无序可变 序列;
- 键值对包含键对象和值对象;
- 键,是任意的不可变数据(整数、浮点数、字符串、元组),且不可重复;
- 值,可以是任何数据,可重复;
- 键值对包含键对象和值对象;
- 字典的创建
- 通过{} 、dicct()创建字典;
a = {'name':'arina', 'age':18} b = dict(name = arina, age = 18) a = dict([("name", "arina"), ("age", 18)]) c = {} # 空字典对象 d = dict() #空的字典对象 - zip()创建对象
k = ['name', 'age'] v = ['arina', 18] d = dict(zip(k, v))
- fromkeys创建空的字典
a = dict.fromkeys(['name', 'age']) ------- {'name':None, 'age':None}
- 通过{} 、dicct()创建字典;
- 字典元素的访问
- 通过“键”获取“值”,键不存在时,抛出异常;
a = {'name':'arina', 'age':18} a['name'] ------- arina - get(),推荐使用;
指定键不存在,返回None,也可以设定指定“键”不存在时默认返回的对象。a.get('name') ------- arina a.get['job',"不存在"] ------- "不存在" - items()列出全部键值对
a.items() ------- dict_items([('name', arina), ('age', 18)]) - keys()、values()列出全部键、值;
a.keys() ------- dict_keys(['name', 'age']) a.values() ------- dict_values(['arina', 18])
- len()计算键值对的个数;
- in 检测一个键是否在字典中;
'name' in a ------- True
- 通过“键”获取“值”,键不存在时,抛出异常;
- 添加、修改、删除
- 添加时,若键已经存在,则覆盖之前的键值对;若不存在,则新增新的键值对;
a['job'] = teacher
- update()将新字典中的全部键值对加入旧字典中,若键有重复,则直接覆盖;
a = {'name':'arina', 'age':18} b = {'name':'enna', 'job':'teacher'} a.update(b) ------- {'name':enna, 'age':18, 'job':'teacher'} - del()删除指定元素;
- clear()删除全部键值对;
- pop()删除指定键值对,并返回“值对象”;
- popitem()随机删除和返回该键值对;
- 添加时,若键已经存在,则覆盖之前的键值对;若不存在,则新增新的键值对;
- 序列解包
- 可用于元组、列表、字典;
- 序列解包用于字典时,默认是对“键”进行操作;若需要对键值操作,则使用items();对“值”操作,则需要用values();
s = {'name':arina, 'age':18} name, age = s
- 总结
- 键必须可散列;
- 字典在内存中开销巨大;
- 见得查询速度很快;
- 往字典里面添加新键可能会导致扩容,导致散列表中键的次序变化。因此,不要在遍历字典的同时进行字典的修改;
- 是 键值对 的 无序可变 序列;
- 2.5 集合
- 无序可变 ,元素 不能重复 ;
- 集合的所有元素都是字典中的“键对象”,因此不能重复且唯一;
- 创建 & 删除
- {}创建集合对象,add()添加元素;
a = {1, 2, 3} a.add(4) -------- {1, 2, 3, 4} - set()将列表、元组等可迭代对象转成集合,若数据重复,则只保留一个;
a = ['a', 'b', 'c', 'c'] b = set(a) ------- {'a', 'b', 'c'} - remove()删除指定元素;
- clear()清空整个集合;
- {}创建集合对象,add()添加元素;
- 相关操作
- ’ & ’ 并集操作;
- ’ - ’ 差集操作;
- ’ .union() ’ 并集操作;
- ’ .interection(b) ’ 交集操作;
- ’ .difference() ’ 差集操作;



