一、字典
列表缺陷:若数据顺序发生变化,无法通过下标i(list[i])访问到变化数据
字典:数据以键值对形式出现,与数据顺序无关,不支持下标访问,无论顺序如何变化,均可用键名key查找数据
字典特点:符号为大括号、数据以键值对形式出现、各键值对间用逗号隔开
1.1 常见操作方法:增、删、改、查
- 增加
- 单个增加:字典序列[key] = 值 # 不存在则增加,存在则修改
- 多个增加:dict1.update(dict2),将字典dict2的键值对更新至字典dict1,若key已存在,则覆盖原值
- 删除
- 删除指定键值对:del 字典序列[key]
- 字典序列.popitem():返回并删除最后一对键值对,若为空,则报异常
- 清空字典:字典序列.clear()
- 修改:字典序列[key] = 值 # 若key存在则修改,否则新增
- 查找
- key值查找:字典序列[key],若key存在返回对应值,否则报错
- get():字典序列.get(key,默认值),若key不存在则返回默认值,若默认值省略,则返回None
- keys():以列表形式返回字典所有键
- values():以列表形式返回字典所有值
- items():以列表形式返回字典(键,值)元组数组
举例如下:
dict1 = {'id': 2, 'name': 'XX', 'age': 20} # 创建字典,键(key):值(value),简称k:v
dict2 = {'name': 'YX', 'tel': 888, 'address': 'JXUST'}
print('------------新增---------------')
dict1['gender'] = '男' # 增加键值对'gender':'男'
print(dict1)
dict1.update(dict2) # 把字典dict2中的键值对更新至字典dict1中,若已存在则覆盖
print(dict1)
print('------------删除---------------')
del dict1['id'] # 删除键名为id的键值对
print(dict1)
print(dict1.popitem(), dict1) # popitem()返回并删除最后一对键和值,若为空,则报异常
# dict1.clear() # 清空字典
print('------------修改---------------')
dict1['gender'] = '女' # 修改键gender值为女
print(dict1)
print('------------查找---------------')
print(dict1['age'])
print(dict1.get('name'), dict1.get('weight', '体重未知!'), dict1.get('weight'))
print(dict1.keys(), dict1.values(), dict1.items()) # 以列表形式获取字典所有键、所有值、所有(键,值)
输出:
------------新增---------------
{'id': 2, 'name': 'XX', 'age': 20, 'gender': '男'}
{'id': 2, 'name': 'YX', 'age': 20, 'gender': '男', 'tel': 888, 'address': 'JXUST'}
------------删除---------------
{'name': 'YX', 'age': 20, 'gender': '男', 'tel': 888, 'address': 'JXUST'}
('address', 'JXUST') {'name': 'YX', 'age': 20, 'gender': '男', 'tel': 888}
------------修改---------------
{'name': 'YX', 'age': 20, 'gender': '女', 'tel': 888}
------------查找---------------
20
YX 体重未知! None
dict_keys(['name', 'age', 'gender', 'tel']) dict_values(['YX', 20, '女', 888]) dict_items([('name', 'YX'), ('age', 20), ('gender', '女'), ('tel', 888)])
1.2 字典的循环遍历
- 遍历字典的key:for k in 字典序列.keys():print(k)
- 遍历字典的value:for v in 字典序列.values():print(v)
- 遍历字典的键值对:for k,v in 字典序列.items():print(f'{k} = {v}')
- 遍历字典的元素:for i in 字典序列.items():print(i)
举例如下:
print('------------遍历---------------')
print('-----键-----')
for k in dict.keys(): # 遍历键key
print(k)
print('-----值-----')
for v in dict.values(): # 遍历值value
print(v)
print('-----键值-----')
for k,v in dict.items(): # 遍历键值对
print(f'{k} = {v}')
print('-----元素-----')
for i in dict.items(): # 遍历元素
print(i)
输出:
------------遍历---------------
-----键-----
name
age
gender
tel
-----值-----
YX
20
女
888
-----键值-----
name = YX
age = 20
gender = 女
tel = 888
-----元素-----
('name', 'YX')
('age', 20)
('gender', '女')
('tel', 888)
二、集合
创建集合:使用{}或set(),空集合只能用set(),{}用来创建空字典
集合特点:可以去除重复数据,数据是无序的,故不支持下标
集合常见操作方法
2.1 增加
- add():集合序列.add(数据) ,追加单个数据,由于集合有去重功能,若追加数据已存在,则不进行任何操作
- update():集合序列.update(序列) # 追加序列,序列可为列表、元组或字符串等
2.2 删除
- remove():序列.remove(数据),删除集合中指定数据,若数据不存在则报错
- discard():序列.discard(数据),删除集合中指定数据,若数据不存在不报错
- pop():序列.pop(),随机删除集合中某个数据,并返回该数据
2.3 判断
- in:判断数据在集合序列,若在为True,否则False
- not in:判断数据不在集合序列,若不在为True,否则False
- s1.issubset(s2):判断集合s1所有元素是否都包含在集合s2中,若在为True,否则False
举例如下:
print('------------集合------------')
print('--------创建方式一--------')
s1 = {'a', 'b', 2, 'a'}
print(s1)
s1.add('aa') # 追加单个数据
print(s1)
s1.update(('bb', 22)) # 追加元组序列
print(s1)
print('--------创建方式二--------')
s2 = set('ab2a')
print(s2)
s2.update(['bb', 'cc', 22]) # 追加列表序列
print(s2)
s2.update('cdd') # 追加字符串序列
print(s2)
print('--------删除--------')
s1.remove('a') # 删除a
print(s1)
s1.discard(2) # 删除2
print(s1)
print(s1.pop(), s1)
print('--------判断--------')
print('b' in s1, 'bb' not in s1, s1.issubset(s2))
输出:
------------集合------------
--------创建方式一--------
{'b', 2, 'a'}
{'b', 2, 'aa', 'a'}
{2, 'bb', 'b', 'a', 22, 'aa'}
--------创建方式二--------
{'b', '2', 'a'}
{'2', 'bb', 'b', 'a', 22, 'cc'}
{'2', 'c', 'bb', 'b', 'd', 'a', 22, 'cc'}
--------删除--------
{2, 'bb', 'b', 22, 'aa'}
{'bb', 'b', 22, 'aa'}
bb {'b', 22, 'aa'}
--------判断--------
True True False