1.字典
1.增和改
字典[键] = 值 - 当键存在的时候修改键对应的值,当键不存在的时候是添加键值对 字典.setdefault(键, 值) - 添加键值对,如果键已经存在,则不会改变值
cat = {'name':'叨叨','age':2,'color':'white'}
-
添加 cat['breed'] = '美短'
print(cat)
cat.setdefault('weight', 8)
print(cat)
cat.setdefault('age', 3)
print(cat)
-
修改 cat['age'] = 1
print(cat)
-
练习:在students中没有分数的学生中添加分数对应的键值对,分数值为零 students = [
{'name': 'stu1', 'tel': '1234', 'score': 89},
{'name': 'stu2', 'tel': '465', 'score': 80},
{'name': 'stu3', 'tel': '678'},
{'name': 'stu3', 'score': 78},
{'name': 'stu4', 'tel': '234'}
]
for item in students:
item.setdefault('score',0)
print(item)
2.删 - 删除键值对
del 字典[键] - 删除字典中指定键对应的键值对(如果键不存在会报错) 字典.pop(键) - 取出字典中指定键对应的值
del cat['color']
print(cat)
del_value = cat.pop('breed')
print(cat)
print(del_value)
3.字典相关操作
字典不支持+、*,也不支持比较大小的运算符,只支持==、!= in 和 not in - 字典的in 和 not in判断的是件是否存在
4.字典相关函数
'''
len - 获取字典长度
dict() - 1)数据本身是一个序列
2)序列中的元素必须是有且只有两个元素的小序列
3)小序列的第一个元素必须是不可变的数据
'''
data = [('a', 10), ('b', 20)]
print(dict(data))
data2 = ['ab', range(2), [10, 20]]
print(dict(data2))
"""
字典转换成列表/元组
"""
dic2 = {'a': 10, 'b': 1, 'c': 20}
print(list(dic2))
5.字典相关方法
'''
字典.clear - 清空
字典.copy - 复制原字典产生一个一模一样的新字典
字典.update(序列) - 将序列中所有的元素都添加到字典中(如果本身就存在就会被覆盖)。序列必须是字典或者是能够被转换成字典的序列
items、keys、values
字典.keys - 获取字典所有的键,返回一个序列(这个序列不是列表和元组)
'''
data3 = {'d': 23, 'e': 21}
print(dic2)
dic2.update(data3)
print(dic2)
dic2.update(['xy','mn'])
print(dic2)
print(dic2.keys())
print(dic2.values())
print(dic2.items())
6.字典推导式
'''
{键的表达式:值的表达式 for 变量 in 序列}
{键的表达式:值的表达式 for 变量 in 序列 if 条件语句}
'''
dic3 = {'a': 10, 'b': 1, 'c': 20}
new_dic3 = {dic3[key]:key for key in dic3}
print(new_dic3)
2.集合
1.什么是集合(set)
? ①集合是容器:将{}作为容器标志,多个元素用逗号隔开:{元素1, 元素2, 元素3,…} ? ②集合是可变的;集合是无序的; ? ③元素:不可变的数据,元素是唯一的(具备自动去重的功能)
set1 = set()
print(type(set1), len(set1))
print({1,2,3}=={2,3,1})
set2 = {1, 'ab', (2,3)}
print(set2)
set4 = {1, 2, 3, 1, 2}
print(set4)
2.集合元素的增删改查
? 1)查 - 遍历
"""
for 元素 in 集合:
循环体
"""
nums = {23, 90, 89, 34}
for x in nums:
print(x)
? 2)增
"""
集合.add(元素) - 在集合中添加指定元素
集合.updat(序列) - 将序列中的元素全部添加到集合中
"""
nums.add(22)
print(nums)
nums.update('abc')
print(nums)
? 3)删
"""
集合.remove(元素) - 删除指定元素,如果元素不存在会报错
集合.discard(元素) - 删除指定元素,如果元素不存在不会报错
集合.pop() - 随机删除集合中的一个元素
"""
nums.remove(89)
print(nums)
nums.discard(22)
print(nums)
? 4)改 - 集合无法直接修改元素的值,如果非要改就将要改的元素删除,添加新的元素
nums.remove('a')
nums.add('A')
print(nums)
3.数学集合运算
&(交集)、|(并集)、-(差集)、^(对称差集)、>/<(真子集)、>=/<=(子集)
集合运算与数学中的集合运算方法一致,演示如下:
num1 = {1,2,3,4,5,6,7}
num2 = {5,6,7,8,9}
print(num1 & num2)
print(num1 | num2)
print(num1 - num2)
print(num1 ^ num2)
print(num1 > num2)
3.字典与集合练习
-
定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )
-
统计不及格学生的个数 -
打印不及格学生的名字和对应的成绩 -
打印手机尾号是8的学生的名字
count = 0
for stuin students:
if stu['score'] < 60:
count += 1
print('不及格学生是:',stu['name'],'他的成绩是:%.f'%stu['score'])
if stu['tel'][-1] == '8':
print('手机尾号是8的学生的姓名:',stu['name'])
print('不及格的学生人数是:',count)
-
打印最高分和对应的学生的名字 max_score = students[0]['score']
name = students[0]['name']
for item in students:
if item['score'] > max_score:
max_score = item['score']
name = item
print('最高分:',max_score,'他的名字是:',name['name'])
-
删除性别不明的所有学生 index = len(students)
while index:
index -= 1
if students[index]['gender'] == '不明':
del students[index]
print(students)
-
将列表按学生成绩从大到小排序(挣扎一下,不行就放弃) index = len(students)
for x in range(index):
for y in range(x,index):
if students[x]['score'] < students[y]['score']:
max1 = students[y]
students[y] = students[x]
students[x] = max1
print(students[x])
-
用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
-
求选课学生总共有多少人 stu = (maths | chineses | englishs)
print('选课学生一共有:',len(stu))
-
求只选了第一个学科的人的数量和对应的名字 stu = maths - chineses - englishs
print('只选了第一个学科的人数是:',len(stu),'他们分别是',stu)
-
求只选了一门学科的学生的数量和对应的名字 stu = maths ^ chineses ^ englishs
print(stu)
-
求只选了两门学科的学生的数量和对应的名字 stu = (maths & english - chinese) | (maths & chinese -english) | (chinese & english - chinese)
print('只选了两门学科的学生的人数是:',len(stu),'他们是:',stu)
-
求选了三门课程的学生的数量和对应的名字 stu = maths & english & chinese
print('选了三门课程的学生的数量:',len(stu),'他们是:',stu)
|