day7-字典和集合
一、字典
数据需要区分就用字典,不需要区分就用列表
1、字典存在的价值
- 可以在同时保存多个意义不同的数据的时候通过key来对数据进行区分和说明
2、什么是字典(dict)
(1)字典
- 字典是容器型数据类型,将{}作为容器的标志,里面多个元素(元素的键值对)用逗号隔开
- {键1:值1,键2:值2,键3:值3}
(2)字典的元素
- 必须是键值对
- 键 - 必须是不可变数据(数字,字符串,元组),一般用字符串(功能是对值进行说明);必须是唯一的,同一个键在字典里只能出现一次
- 值 - 任何类型的数据都可以,还可以重复(值才是字典真正想要保存的数据)
- 字典是可变的(支持增删改)
- 字典是无序的(不支持下标,顺序不影响结果)
- a.空字典
d1 = {
}
print(type(d1), d1) # <class 'dict'> {}
- b.键是任何不可变的数据
d2 = {
'abc': 100, 12: 200, (10, 20): 300}
print(d2) # {'abc': 100, 12: 200, (10, 20): 300}
- c.键如果是可变的列表,会报错
# d3 = {'abc': 100, 12: 200, [10, 20]: 300}
# print(d3)
# TypeError: unhashable type: 'list'
- d.键是唯一的
d4 = {
'name': '小明', 'name': '小话'}
print(d4) # {'name': '小话'}
- e.字典无序
d6 = {
'name': '张三', 'age': 30}
d7 = {
'age': 30, 'name': '张三'}
print(d6 == d7) # True
3、字典元素的增删改查
(1)查 - 获取字典的值
不等于切片,切片只有有序序列才可以
a.查单个值
- 字典[key] - 获取字典中指定key对应的值
- 字典.get(key) - 获取字典中指定key对应的值;如果key不存在不报错,把None返回
- 字典.get(key.默认值) - 获取字典中指定key对应的值;如果key不存在不报错,把默认值返回
- 这三种方法在key存在的时候没有任何差别,主要是当key不存在的时候有差别
dog = {
'name': '旺财', 'sex': '公狗', 'color': '黄色', 'breed': '土狗', 'age': 2}
print(dog['name'], dog['breed']) # 旺财 土狗
# print(dog['height']) # 报错:KeyError: 'height'
print(dog.get('age')) # 2
print(dog.get('height')) # None
print(dog.get('color', '黑色')) # 黄色
print(dog.get('height', 0)) # 0
b.遍历
- for 变量 in 字典:
循环体
- 注意:变量依次取到的是字典的每个key
dog = {
'name': '旺财', 'sex': '公狗', 'color': '黄色', 'breed': '土狗', 'age': 2}
for x in dog:
print('x:', x, dog[x])
'''
x: name 旺财
x: sex 公狗
x: color 黄色
x: breed 土狗
x: age 2
'''
# 练习:1)统计班级中不及格学生的人数
# 2)计算所有学生的平均分
classes = [
{
'name': '小明', 'age': 26, 'score': 90, 'sex': '男'},
{
'name': 'sut1', 'age': 13, 'score': 89, 'sex':