字典
认识字典
# 定义一个变量保存学生的信息
stu = ['张三',18,'185656','5454669',156,65,56]
print(stu[0])
print(stu[1]+2)
stu = {
'name':'张三',
'age':18,
'tel':'185656',
'id':'5454669',
'high':156,
'weight':65,
'score':56
}
print(stu['name'])
print(stu['age']+2)
字典和列表的选择
# 字典和字典的选择;需要同时报讯多个数据的时候,如果多个数据意义相同(不需要区分)就使用字典;如果多个数据意义不同就是用字典
认识字典(dict)
'''
1)是容器数据类型;
将{}作为容器的标志,里面多个减脂对用逗号隔开;{键1:值1, 键2:值2,...}
键值对格式;键:值
2)字典是可变的(支持增删改);字典是无序(不支持下标,元素顺序不影响结果)
3)对元素的要求
字典的元素是键值对
a.键的要求;键必须是不可变的类型的数据(数字、字符串、布尔、元组等);键是唯一的
b.值的要求;没有要求
'''
字典的基本操作
查 - 获取字典的值
# 1)查单个(重要) - 一次获取一个值
'''
语法1;字典[键] - 获取字典中指定键对应的值;键不存在会报错
语法2;字典.get(键) - 获取字典中指定键对应的值;键不存在不会报错,返回 None
字典.get(键,默认值) - 获取字典中指定键对应的值;键不存在不会报错,返回默认值
'''
# 2.列表和字典的正确打开方式
class1 = {
'name': 'python2201',
'address': '12教室',
'lecturer': {
'name': '余婷',
'gender': '女',
'tel': '13678192302'
},
'class_teacher': {
'name': '张瑞燕',
'gender': '女',
'tel': '110',
'age': 20,
'QQ': '617818271'
},
'students': [
{'name': '小明', 'gender': '男', 'age': 18, 'score': 100, 'education': '专科', 'linkman': {'name': '小吴', 'tel': '110'}},
{'name': '小花', 'gender': '女', 'age': 20, 'score': 98, 'education': '本科', 'linkman': {'name': '小张', 'tel': '120'}},
{'name': '张三', 'gender': '男', 'age': 30, 'score': 90, 'education': '本科', 'linkman': {'name': '小赵', 'tel': '119'}},
{'name': '李四', 'gender': '男', 'age': 22, 'score': 70, 'education': '专科', 'linkman': {'name': '小刘', 'tel': '134'}},
{'name': '王二', 'gender': '男', 'age': 28, 'score': 95, 'education': '本科', 'linkman': {'name': '小徐', 'tel': '2383'}},
{'name': '赵敏', 'gender': '女', 'age': 27, 'score': 99, 'education': '专科', 'linkman': {'name': '小胡', 'tel': '23423'}},
{'name': '老王', 'gender': '男', 'age': 22, 'score': 89, 'education': '本科', 'linkman': {'name': '小王', 'tel': '1234'}}
]
}
# 1) 获取班级名字
print(class1['name'])
# 2) 获取讲师的名字
lecturer = class1['lecturer']
print(lecturer['name'])
print(class1['lecturer']['name'])
# 3) 获取班主任电话号码
class_teacher = class1['class_teacher']
print(class_teacher['tel'])
# 4) 统计学生中男生的数量
students = class1['students']
students_count = 0
for i in students:
if i['gender'] == '男':
students_count += 1
print(students_count)
# 5) 计算所有学生分数的平均分
# a
list1 = []
for i in students:
score = int(i['score'])
list1.append(score)
print(sum(list1)/len(list1))
# b
result = sum(stu['score'] for stu in students)/len(students)
print(result)
# 6) 获取分数最高的学生的名字
students = class1['students']
max_score = max(list1)
for i in students:
if int(i['score']) == max_score:
print(i['name'])
# 7) 获取所有紧急联系人的电话
for i in students:
linkman = i['linkman']
print(linkman['tel'])
遍历
'''
1)直接遍历
for 键 in 字典:
pass
2)
for 键,值 in 字典.items():
pass
'''
字典的增删改
增/改 - 添加键值对
'''
1)字典[键] = 值 如果键存在,就修改指定键对应的值;如果不存在就添加键值对
2)字典.setdefault(键,值) 添加键值对(如果不存在就添加键值对,如果键存在则不改变
'''
删 - 删除键值对
'''
del 字典[键] - 删除指定键对应的键值对
字典.pop(键) - 取出指定键对应的值
'''
字典的相关操作
相关操作
# 1)字典不支持;+,-,*,/,<=,>=,只支持;==,!=
# 2)in 和 not in - 字典的in 和 not in 操作判断的是字典中是否存在指定的键
# 键 in 字典
相关函数 - len、dict
'''
len(字典) - 获取字典中键值对个数
dict(数据) - 将指定数据转换为字典
对数据的要求;1.数据本身是一个序列
2.序列中的元素必须是有且仅有两个元素的小序列,并且其中第一个元素是不可变的数据
'''
相关方法
# a.
# 字典.clear()
# b.
# 字典.copy()
# c.
# 字典.keys() - 返回一个序列,序列中的元素是字典所有的键
# 字典.values() - 返回一个序列,序列中的元素是字典所有的值
# 字典.items() - 返回一个序列,序列中的元素是字典中的键值对(元组)
# d.
# 字典.update(序列) - 将可以转换为字典的序列中的元素全部添加在字典中
# 字典1.update(字典2) - 将字典2中的所有键值对都添加到字典1中(没有添加,有的替换)
字典的推导式
'''
{表达式1:表达式2 for 变量 in 序列}
{表达式1:表达式2 for 变量 in 序列 if 条件语句}
'''
作业
- 定义一个变量保存一个学生的信息,学生信心中包括:姓名、年龄、成绩(单科)、电话、性别
dict1 = {}
name = input('请输入学生姓名;')
dict1['name'] = name
age = input('请输入学生年龄;')
dict1['age'] = age
score = input('请输入学生单科成绩;')
dict1['score'] = score
tel = input('请输入学生电话;')
dict1['tel'] = tel
gender = input('请输入学生性别;')
dict1['gender'] = gender
print(dict1)
-
定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )
- 统计不及格学生的个数
- 打印不及格未成年学生的名字和对应的成绩
- 求所有男生的平均年龄
- 打印手机尾号是8的学生的名字
- 打印最高分和对应的学生的名字
- 删除性别不明的所有学生
- 将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
''' list1 = [] for i in range(6): dict1 = {} name = input('请输入学生姓名;') dict1['name'] = name age = input('请输入学生年龄;') dict1['age'] = age score = input('请输入学生单科成绩;') dict1['score'] = score tel = input('请输入学生电话;') dict1['tel'] = tel gender = input('请输入学生性别;') dict1['gender'] = gender list1.append(dict1) ''' list1 = [ { 'name':'张三', 'age':18, 'score':59, 'gender':'男', 'tel':110 }, { 'name':'李四', 'age':17, 'score':69, 'gender':'未知', 'tel':110 }, { 'name':'王五', 'age':28, 'score':66, 'gender':'女', 'tel':1103 }, { 'name':'赵六', 'age':21, 'score':55, 'gender':'男', 'tel':1101 }, { 'name':'钱七', 'age':15, 'score':99, 'gender':'男', 'tel':11075 }, { 'name':'孙八', 'age':33, 'score':79, 'gender':'女', 'tel':11058 }, ] # 1/2 count1 = 0 for j in range(6): if int(list1[j]['score']) < 60: count1 += 1 print(list1[j]['name'],list1[j]['score']) print('不及格学生个数;',count1) print() # 3. age_average = sum([int(x['age']) for x in list1 if x['gender'] == '男']) // len([int(x['age']) for x in list1 if x['gender'] == '男']) print(age_average) print() # 4. for i in list1: if int(i['tel']) % 10 == 8: print(i['name']) print() # 5. list2 = [] for i in list1: list2.append(int(i['score'])) for i in list1: if int(i['score']) == max(list2): print(i['name']) print() # 6. for i in list1: if i['gender'] == '未知': list1.remove(i) print(list1) print() # 7. list3 = [] for i in list1: list3.append(int(i['score'])) list3.sort(reverse=True) list4 = [] for j in range(len(list1)): for i in list1: if int(i['score']) == list3[j]: list4.append(i) print(list4)
- 定义一个变量保存一个班级的信息,班级信息中包括:班级名称、教室位置、班主任信息、讲师信息、班级所有的学生(根据实际情况确定数据类型和具体信息)
dict1 = {
'class_name': 'python2201',
'class_location': '12教室',
'lecturer': {
'name': '余婷',
'gender': '女',
'tel': '13678192302'
},
'class_teacher': {
'name': '张瑞燕',
'gender': '女',
'tel': '110',
'age': 20,
'QQ': '617818271'
},
'students': [
{'name': '张三', 'gender': '男', 'age': 18, 'score': 100, 'education': '专科'},
{'name': '李四', 'gender': '女', 'age': 20, 'score': 98, 'education': '本科'},
{'name': '王五', 'gender': '男', 'age': 30, 'score': 90, 'education': '本科'},
{'name': '赵六', 'gender': '男', 'age': 22, 'score': 70, 'education': '专科'},
{'name': '孙七', 'gender': '男', 'age': 28, 'score': 95, 'education': '本科'},
{'name': '钱八', 'gender': '女', 'age': 27, 'score': 99, 'education': '专科'},
{'name': '刘九', 'gender': '男', 'age': 22, 'score': 89, 'education': '本科'}
]
}
- 已知一个列表保存了多个狗对应的字典:
dogs = [
{'name': '贝贝', 'color': '白色', 'breed': '银狐', 'age': 3, 'gender': '母'},
{'name': '花花', 'color': '灰色', 'breed': '法斗', 'age': 2},
{'name': '财财', 'color': '黑色', 'breed': '土狗', 'age': 5, 'gender': '公'},
{'name': '包子', 'color': '黄色', 'breed': '哈士奇', 'age': 1},
{'name': '可乐', 'color': '白色', 'breed': '银狐', 'age': 2},
{'name': '旺财', 'color': '黄色', 'breed': '土狗', 'age': 2, 'gender': '母'}
]
- 利用列表推导式获取所有狗的品种
print([i['breed'] for i in dogs])
- 利用列表推导式获取所有白色狗的名字
print([i['name'] for i in dogs if i['color'] == '白色'])
- 给dogs中没有性别的狗添加性别为 ‘公’
for i in dogs:
i.setdefault('gender', '公')
print(dogs)
- 统计 ‘银狐’ 的数量
count1 = 0
for i in dogs:
if i['breed'] == '银狐':
count1 += 1
print('银狐数量:',count1)