一 . 字典
1 . 认识字典
- 什么是字典(dict):
1) 字典是容器类数据类型;对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中
例如: {键1:值1, 键2:值2:}
2) 字典是可变的(支持增删改);字典是无序的(不支持下标操作)
3) 元素的要求:
a. 键: 1) 键必须是不可变的数据类型的数据:(列表,字典不行) ;
2) 键是唯一的
b. 值: 没有要求
2.字典的特征:
1)字典是无序的
例子:print({'a': 10, 'b': 20} == {'b': 20, 'a': 10})
2)字典的键是不可变数据
例子:dict2 = {10: 20, 1.2: 30, 'a': 10, True : 20, [1, 2]: 30} #TypeError: unhashable type: 'list'
3)键是唯一的
print({'a': 10, 'b': 20, 'a': 20}) #a-10
3.字典查找
3.1: 查单个(重要) - 获取单个值
语法1: 字典[键] - 获取指定键对应的值,键不存在报错
语法2: 字典.get(键) - 获取指定键对应的值,键不存在返回None
语法2: 字典.get(键,默认值) - 获取指定键对应的值,键不存在返回默认值
例子: 创建一个字典保存一个班级信息
class1 = {
'name': 'python',
'address' : '14教师',
'班主任': {'name': '舒玲' , 'qq' : '723350822 ', 'gender': '女', 'age': 18 },
'讲师' : {'name': '余婷' , 'qq' : '726550822 ', 'gender': '女', 'age': 18 },
'student' : [
{ 'name': 'wxk' , 'qq' : '949678620 ', 'gender': '男', 'age': 18,'linkman': {'name': 'wgb','tel':187} },
{'name': '伍旭魁', 'qq': '949678621 ', 'gender': '男', 'age': 25, 'linkman': {'name': '伍国兵', 'tel': 133}},
{ 'name': 'wx1' , 'qq' : '949678622 ', 'gender': '女', 'age': 28,'linkman': {'name': 'wgb','tel':187} },
{ 'name': 'wx2' , 'qq' : '949678622 ', 'gender': '男', 'age': 13,'linkman': {'name': 'wgb','tel':187} },
]}
#1 获取班级名字
print(class1['name'])
# 2 获取讲师名字
print(class1['讲师']['name'])
# 3.班主任的名字
print(class1['班主任']['qq'])
# 4.所有学生的名字
for x in class1['student']:
print(x['name'])
print( x['name'] for x in class1['student'])
# 5.统计学生的个数
count = 0
for x in class1['student']:
if x['gender'] == '男':
count += 1
print(count)
# 6. 计算班级学生的平均年龄
totalage = 0
for x in class1['student']:
totalage += stu['age']
count += 1
print(f'平均年纪:{totalage / count:.2f}')
# 7. 打印所有学生的联系人的电话号码
for x in class1['student']:
print(x['linkman']['tel'])
3.2:遍历
语法: for 变量 in 字典:
循环体
例子:
dog = {'name': '菜菜', 'gender': '母狗', 'breed': '哈士奇', 'age': 3}
for x in dog:
print(x, dog[x])
- . 字典的增删改
- 增.改
语法1: 字典[键] = 值 - 如果键不存在就添加键值对;如果键存在就修改其值
语法2: 字典.setdefault(键, 值) -如果键不存在添加,存在不会改变
- 删除
1) del 字典[键] - 删除指定键对应得键值对
2) 字典.pop(键) - 取出指定键对应的值
- . 字典的相关操作和方法
- 字典相关操作: in 和 not in
1)字典不支持: + * 比较大小
2)字典的in 和 not in 判断的是是否存在指定的键
例子:
print(10 in {'a': 10, 'b': 20}) #False
print('a' in {'a': 10, 'b': 20}) #True
- 字典相关函数: len dict:
- 字典转换成列表的时候,是将字典的键作为列表的元素
例子:
dict1 = {'a': 10, 'b': 20}
print(list(dict1)) #['a', 'b']
- 对数据的要求 :
a .要求本身是一个序列
b.序列中的元素必须是有两个元素的小序列
c. 小序列的第一个元素是不可变的类型的数据
例子;
print(dict(['ab', 'cd', 'ef'])) #{'a': 'b', 'c': 'd', 'e': 'f'}
print(dict(['ab', (10, 20), ['age', 18], range(2)])) #{'a': 'b', 10: 20, 'age': 18, 0: 1}
- 字典相关方法
1) 字典.clear() -清空字典
2) 字典.copy() -复制字典
3) 字典.items() - 以元组的形式返回键值对
字典.keys() - 获取所有的键
字典.values() - 获取所有的值
4) 字典.update(字典2) - 将字典2中所有的键值对都添加到字典1
例子:
for key,value in dog.items():
print(key,value) #name 菜菜gender 母狗breed 哈士奇age 3
- . 字典推导式
- 字典推导式
结构1: {表达式:表达式2 for 变量 in 序列}
结构2: {表达式1:表达式2 for 变量 in 序列 if 条件语句}
例子:
dog = {'name': '菜菜', 'gender': '母狗', 'breed': '哈士奇', 'age': 3}
result = { x: None for x in dog}
print(result) #{'name': None, 'gender': None, 'breed': None, 'age': None}
dict1 ={'a': 10, 'b': 20, 'c': 30}
result ={dict1[x]: x for x in dict1} #jianzhi
print(result) #{10: 'a', 20: 'b', 30: 'c'}
总结:注意字典是{},列表是[],元组是(),注意到这点正确是解决问题的第一步