Day7-字典和集合

1.声明一个字典保存一个学生的信息,学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明)

stu = {'name':'小明','age':18,'mate_score':90,'tel':15672963512,'sex':'男'}

2.声明一个列表,在列表中保存6个学生的信息(6个题1中的字典)
a.统计不及格学生的个数
b.打印不及格学生的名字和对应的成绩
c.统计未成年学生的个数
d.打印手机尾号是8的学生的名字
e.打印最高分和对应的学生的名字

​ f.删除性别不明的所有学生

​ g.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

stu_date = [
{'name':'小明','age':18,'math_score':90,'tel':'15672963528','sex':'男'},
{'name':'小王','age':20,'math_score':99,'tel':'15525422512','sex':'女'},
{'name':'小李','age':28,'math_score':37,'tel':'18222142512','sex':'性别不明'},
{'name':'小刘','age':18,'math_score':46,'tel':'15674553512','sex':'男'},
{'name':'小师','age':16,'math_score':96,'tel':'15644225708','sex':'性别不明'},
{'name':'小汪','age':17,'math_score':52,'tel':'15672963512','sex':'男'}
     ]
# 统计不及格人数,打印不及格学生的名字和对应成绩
counts = 0
for pass_not in stu_date:
    if pass_not['math_score']<60:
        counts+=1
        print('姓名:',pass_not['name'],'成绩:',pass_not['math_score'])
print(counts)

#统计未成年学生人数
nums = 0
for i in stu_date:
    if i['age']<18:
        nums+=1
print(nums)

#获取手机尾号是8的学生姓名
for i in stu_date:
    list1 = list(i['tel'])
    if list1[-1]=='8':
        print(i['name'])
#打印最高分和对应学生的姓名
score1 = stu_date[0]['math_score']
for i in stu_date:
    if i['math_score'] > score1:
        score1 = i['math_score']
for j in stu_date:
	if j['math_score']==score1:
		print(j['name'],score1)
#删除性别不明的所有学生
list2 = []
for ind,i in enumerate(stu_date):
    if i['sex']!='性别不明':
        list2.append(stu_date[ind])
print(list2)
#按成绩从大到小排序
scores = sorted([i['math_score'] for i in stu_date],reverse=True)
new_stu = []
for j in scores:
    for x in stu_date:
        if x['math_score']==j:
            new_stu.append(x)
            stu_date.remove(x)
    break
print(new_stu)

3.用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
a. 求选课学生总共有多少人
b. 求只选了第一个学科的人的数量和对应的名字
c. 求只选了一门学科的学生的数量和对应的名字
d. 求只选了两门学科的学生的数量和对应的名字
e. 求选了三门学生的学生的数量和对应的名字

ma = {'小明','小花','TOM','小军','大黄','金丝猴'}
sc = {'大强','旺财','阿狗','小明','大黄','小马','大力'}
ha = {'曾小贤','TOM','胡一菲','狗剩','崽子','小花','小军'}
#a
num = ma|sc
num1 = num|ha
print(len(num1))

#b
list1= list(ma)
list3=list1.copy()
list2= list(sc|ha)
count = 0
for i in list1:
	for j in list2:
		if i==j:
			list3.remove(i)
			count+=1
print(len(list1)-count,list3)

#c
a=ma^sc
b=a^ha-(ma&ha&sc)
print(len(b),b)

#d
a=ma&sc-ha
b=ma&ha-sc
c=sc&ha-ma
d=a|b|c
print(len(d),d)

#e
a=ma&sc
b=a&ha
print(b)

字典

字典是什么
  1. 定义:容器型数据类型,以{键:值}为标志,{}为空字典

  2. 写法:{键1:值1,键2:值2,键3:值3,…}

  3. 要求:键(key)–必须是不可变数据,一般用字符串(数字、元组、字符串)

    ​ 是唯一的,不能存在多个同样的键

    ​ 值(value)–可以是所有数据类型

  4. 特点:可变,无序

字典的增删改查
  1. 增/改

    语法:字典[key]=value

    如果key是字典中已存在的,此处就是修改key对应的值

    如果key是字典中不存在的,此处就是增加(key,value)组成的键值对

    a = {'a':10,'b':20,'c':30}
    a['a']=100
    print(a) # 修改。{'a':100,'b':20,'c':30}
    a['d']=40
    print(a) # 增加。{'a':100,'b':20,'c':30,'d':40}
    

    语法2:字典.setdefault(键,值)—只能添加键值对,不能修改

    a = {'a':10,'b':20,'c':30}
    a.setdefault('d',40)
    print(a) # {'a':10,'b':20,'c':30,'d':40}
    
    1. del 字典[key]
    a = {'a':10,'b':20,'c':30}
    del a['b']
    print(a) # {'a':10,'c':30} 
    del a['d'] # 报错,不能删不存在的键值对
    

    2)字典.pop(key)–取出指定key对应的值,并返回值

    a = {'a':10,'b':20,'c':30}
    b=a.pop('a')
    print(a) # {'a':10,'b':20,'c':30}
    print(b) # 10,取出的key对应的值可以赋值给变量
    
  2. 1)查单个

    语法1:字典[key]----获取不存在的键对应的值,会报错

    a = {'a':10,'b':20,'c':30}
    print(a['b']) # 20 输出为值
    

    语法2:字典.get(key)—获取不存在的键对应的值,不会报错,会输出None

    ​ 字典.get(key,默认值)—获取不存在的键对应的值,会输出默认值,获取存在的,会按原值输出

    a = {'a':10,'b':20,'c':30}
    print(a.get('a')) # 10
    print(a.get('d')) # None
    print(a.get('c',100)) # 30
    print(a.get('d',100)) # 100
    

    2)遍历----变量取到的是字典的键

    语法:for key in 字典:

    ​ print(key,字典[key])

    a = {'name':'小明','age':15,'gender':'男','分数'95}
    for keyes in a:
    	print(keyes,a[keyes])
    
字典相关操作
  1. 只能进行== !=的运算

    比较的是字典键值对是否相同,顺序可以不同

    a = {'name':'小明','age':15,'分数'95}
    b = {'age':15,'分数'95,'name':'小明'}
    print(a==b) # True,顺序不同,但键值对个数和值相同
    
  2. in 和 not in

    看键是否在字典中

    a = {'name':'小明','age':15,'分数'95}
    print('name' in a) # True
    
  3. 相关函数

    sum max min sorted(在字典中不怎么实用)

    len(字典)–获取键值对的个数

    a = {'name':'小明','age':15,'分数'95}
    print(len(a)) # 3
    

    dict(序列)–序列中每个元素都是一个小序列

    ​ 小序列中必须有两个元素

    ​ 两元素的第一个必须是不可变的数据(字符串,元组,数字)

    seq = [(1,2),(10,20),(100,200),('1000',2000),'ab']
    print(dict(seq)) # {1:2,10:20,100:200,'1000':2000,'a':'b'}
    
字典相关方法
  1. 字典.clear()-清楚字典中所有键值对

  2. 字典.copy()-拷贝字典返回一个与原字典相等的新的字典,新字典独立存在

  3. *(了解)dict.fromkeys(序列,值)–创建一个字典,将序列中的元素(序列中的元素都必须是不可变的数据)作为键,值作为他们的值,如果不输入值,他们的值为None(空)

  4. 字典.items()–将字典中的键和值都以序列的形式成对输出

    a = {'name':'小明','age':15,'分数':95}
    print(a.item()) # dict_items([('name', '小明'), ('age', 15), ('分数', 95)]) 可使用list转换成列表
    for key,value in a.items():
    	print(key,value)
    
  5. 字典.keys()–将字典中的键都以序列的形式输出

    a = {'name':'小明','age':15,'分数':95}
    print(a.keys()) # dict_keys(['name', 'age', '分数']) 可使用list转换成列表
    for k in a.keys():
    	print(k,end=' ') # name age 分数
    
  6. 字典.values–将字典中的值都以序列的形式输出

    a = {'name':'小明','age':15,'分数':95}
    print(a.values()) # dict_keys(['小明',15,95]) 可使用list转换成列表
    for k in a.values():
    	print(k,end=' ') # '小明' 15 95
    
  7. 字典.update(序列)–将序列中的元素以键值对的形式添加到字典中,序列里面的元素必须是小序列,小序列里必须有两个元素,第一个元素必须是不可变的数据

    a = {'name':'小明','age':15,'分数':95}
    a.update(((1,2),('a',21)))
    print(a) # {'name': '小明', 'age': 15, '分数': 95, 1: 2, 'a': 21}
    

集合

集合是什么
  1. 什么是集合:容器型数据,以{}为标志,空集合为set( )

  2. 写法:{元素1,元素2,元素3,。。。。。。}

  3. 要求:元素必须是不可变的数据类型,且是唯一的

  4. 特点:可变,无序

  5. 功能:去重

    a = [1,2,5,1,2,8,9]
    print(list(set(a))) # [1,2,5,8,9]
    
    
集合运算

1.并集(|)—两集合中的元素合并

a = {1,5,6,7,8}
b = {1,5,9,3,6}
print(a|b) # {1,5,6,9,3,7,8}

2.交集(&)—两集合的公共部分

a = {1,5,6,7,8}
b = {1,5,9,3,6}
print(a&b) # {1,5,6}

3.差集(-)—一集合减去与另一集合公共的部分

a = {1,5,6,7,8}
b = {1,5,9,3,6}
print(a-b) # {7,8}
print(b-a) # {9,3}

4.对称差集(^)—两集合去掉公共部分相加

a = {1,5,6,7,8}
b = {1,5,9,3,6}
print(a^b) # {7,8,3,9}

5.真子集(>)—一集合为另一集合中的一部分

a = {1,5,6,7,8}
b = {1,5,6}
print(a>b) # True

6.子集(>=)—一集合为另一集合的全部

a = {1,5,6}
b = {1,5,6}
print(a>=b) # True
print(b>=a) # True
a = {1,5,6,7,8}
b = {1,5,9,3,6}
print(a-b) # {7,8}
print(b-a) # {9,3}

4.对称差集(^)—两集合去掉公共部分相加

a = {1,5,6,7,8}
b = {1,5,9,3,6}
print(a^b) # {7,8,3,9}

5.真子集(>)—一集合为另一集合中的一部分

a = {1,5,6,7,8}
b = {1,5,6}
print(a>b) # True

6.子集(>=)—一集合为另一集合的全部

a = {1,5,6}
b = {1,5,6}
print(a>=b) # True
print(b>=a) # True
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值