Day6-元组和字典
01-元组
-
什么是元组(tuple)
元组就是不可变的列表
元组是容器型数据类型,将()作为容器的标志,里面多个元素用逗号隔开:(元素1,元素2,元素3,…)
元组不可变(不支持元素的增删改);元组是有序的(支持下标操作)
元素:任何类型的数据,并且可以重复
t1 = (10, 23, 90, 10) print(type(t1), t1) # 空元组 t2 = ()
-
只有一个元素的元组(元素,)
如果一个元组中有一个元素,那么唯一的元素后面后面必须加逗号
list1 = [23] print(list1, type(list1)) t3 = (23) # <class 'int'> print(t3, type(t3)) t4 = (23,) # <class 'tuple'> print(t4, type(t4))
-
省略括号
在没有歧义的情况下,可以省略元组的(),直接将元素用多个逗号隔开来表示一个元组
t5 = 'abc', 10, 100, True print(t5, type(t5)) t6 = 10, 20, 30 * 2 t7 = (10, 20, 30) * 2 print(t6, type(t6), t7, type(t7))
-
获取元素
-
列表获取元素的方法元组都支持
-
让变量的个数和元组中元素的个数保持一致来获取元组所有元素的值
# 变量1, 变量2, 变量3,... = 元组 t8 = (10, 11, 12) x, y, z = t8 print(x, y, z)
-
同时用多个变量获取元组中元素的时候,变量的个数可以比元组中的元素的个数少,但是必须有且只有一变量前有*
stu = ('小明', '男', 30, 89, 70, 170) m1, m2, *m3 = stu print(m1, m2, m3) name, sex, *massage, height = stu print(name, sex, massage, height)
-
-
元组相关操作
列表相关操作元组操作
02-字典
-
# 定义一个变量保存一个学生的信息:姓名、性别、年龄、身高、体重、成绩 stu1 = ['小明', 'man', 30, 177, 80, 78] stu = {'name': '小明', 'sex': '男', 'age': 30, '身高': '177', 'weight': '80'} print(stu['name'])
什么时候使用字典
同时保存多个意义不同的数据就使用字典 -
什么是字典(dict)
字典是容器型数据类型,将{}作为容器的标志, 里面多个元素用逗号隔开(元素必须是键值对)
{键1:值1,键2:值2,…}
字典是可变的(支持增删改);字典是无序的(不支持下标操作)
元素:必须是键值对;
键 - 必须是不可变的数据(数字、字符串、元组),一般使用字符串;键是用来对值进行描述和区分的
唯一的
值 - 没有要求
# 空字典
d1 = {}
print(type(d1)) # <class 'dict'>
# 键是不可变的
d2 = {'name': '小米', 10: 100, (1, 2): 200}
print(d2) # {'name': '小米', 10: 100, (1, 2): 200}
# 报错!列表不能作为键
# d3 = {'name': '小米', 10: 100, [1, 2]: 200} # TypeError: unhashable type: 'list'
-
键是唯一
d3 = {'name': 'Bob', 'age': 18, 'name': 'Tom'} # {'name': 'Tom', 'age': 18} print(d3)
-
字典无序
print({'a': 10, 'b': 20} == {'b': 20, 'a': 10}) # True
-
字典的增删改查
-
查 - 获取值
-
获取单个值:a.字典[key] - 获取指定key对应的值
b.
字典.get(key) - 获取指定key对应的值(如果key不存在不会报错,返回None)
字典.get(key, value(默认值)) - 获取指定key对应的值(如果key不存在不会报错,返回默认值)dog = {'name': '旺财', 'age': '3', 'sex': '母狗', 'breed': '二哈'} print(dog['sex'], dog['name']) print(dog.get('age')) print(dog.get('breed', '公')) # print(dog['weight']) # KeyError: 'weight' print(dog.get('weight')) # None print(dog.get('weight', 0)) # 0
-
遍历
""" for 变量 in 字典: pass 注意:变量依次取到的是字典的key """ # 键值对离开了字典无效 dog = {'name': '旺财', 'age': '3', 'sex': '母狗', 'breed': '二哈'} for x in dog: print('x:', x, dog[x])
-
-
增、改
""" 字典[key] = 值 - 当key存在就是修改指定key对应的值,当key不存在就是添加键值对 """ dog['name'] = '大黄' dog['age'] = 2 dog['weight'] = 30 print(dog)
-
删
# del 字典[key] - 删除指定key对应的键值对 # 字典.pop(key) - 取出指定key对应的值 del dog['sex'] print(dog) del_name = dog.pop('name') print(dog, del_name)
-
03-字典的实际应用
# 练习:定义一个变量保存一个班级的信息,班级信息主要包含:班级名称、位置、容量、班主任、讲师、所有学生
# 班主任:姓名、性别、年龄、电话、QQ
# 讲师:姓名、性别、年龄、电话、QQ、级别
# 所有学生:多个学生,每个学生包含:姓名、性别、年龄、学历、专业、电话
class2004 = {'class_name': 'python_2004',
'location': '成都',
'capacity': 60,
'class_teacher': {
'name': '张老师',
'gender': '女',
'age': 10,
'tel': '110',
'qq': '787239'
},
'lecturer': {
'name': '骆老师',
'gender': '男',
'age': 40,
'tel': '120',
'qq': '782120239',
'rank': '高级'
},
'student': [
{'name': '小明', 'gender': '男', 'age': 19},
{'name': '小花', 'gender': '女', 'age': 18},
{'name': '张三', 'gender': '男', 'age': 23},
{'name': 'Tom', 'gender': '男', 'age': 22},
{'name': 'Bob', 'gender': '男', 'age': 30}
]
}
print(class2004['class_teacher']['name'])
print(class2004['lecturer']['name'], class2004['lecturer']['rank'])
print(class2004['student'])
ages = 0
stu = class2004['student']
for x in stu:
ages += x['age']
print(ages/(len(stu)))
04-字典的相关操作
-
字典不支持加法、乘法运算,也不支持比较大小
in 和 not in
key in 字典 - 判断字典中是否存在指定的键
d1 = {'a': 10, 'b': 20, 'c': 30} print(10 in d1) # False print('a' in d1) # True
-
相关函数:len、dict
-
获取长度
print(len(d1))
-
字典的类型转换
""" dict(数据) - 将指定数据转换成字典,数据的要求: a.数据本身是序列 b.序列中的每个元素必须是长度为2的小序列 c.小序列中的第一个元素是不可变的数据 list(字典) - 将指定字典转换成列表(将字典的key作为列表的元素) """ date = ['ab', (10, 20), ['abc', 123]] print(dict(date)) print(list(d1))
-
字典的相关方法
- 字典.clear() - 清空字典
d1.clear() print(d1)
- 字典.copy() - 复制字典产生一个一模一样的新字典
d1 = {'a': 10, 'b': 20, 'c': 30} d2 = d1 d3 = d1.copy() print(d2) d1['c'] = 300 print(d2)
-
# dict.fromkeys(序列) - 创建一个新的字典,键是序列中的每一个元素,值都是None # dict.fromkeys(序列, 值) - 创建一个新的字典,键是序列中的每一个元素,值是指定的值 print(dict.fromkeys('abc', 1))
-
keys、values、items
""" 字典.key() - 获取字典所有的key(返回值是序列但是不是列表) 字典.values() - 获取字典所有的值(返回值是序列但是不是列表) 字典.items() - 同时获取每个键值对的键和值(返回值是序列,序列中的元素是元组) """ d1 = {'a': 10, 'b': 20, 'c': 30} print(d1.keys()) # dict_keys(['a', 'b', 'c']) print(d1.values()) # dict_values([10, 20, 30]) print(d1.items()) # dict_items([('a', 10), ('b', 20), ('c', 30)]) print(list(d1.keys()))
-
字典.setdefault(键,值) - 在字典中添加键值对(只添加不修改)
d1.setdefault('name', 234) print(d1)
-
字典1.update(字典2) - 将字典2中所有的键值对都添加到字典1中
注意:字典2不一定是字典,也可以是能转换成字典的序列
d1 = {'a': 10, 'b': 20, 'c': 30} d1.update({'name': '张三'}) d1.update(('nm', [2, 3])) print(d1)
-
-