day8 字典和集合

day8 字典和集合

1,字典的增 删 改

1), 增和改

"""
字典[键] = 值  -  当键存在的时候是修改对应的值:当键不存在的时候是添加键值对
字典.setdefault(键,值)  -  添加键值对(当键存在的时候不会修改原来的值)
"""

举例:

cat = {'name':'美美','age':2,'color':'白色'}
print(cat)
#添加
cat['breed'] = '蓝猫'
print(cat)

#修改
cat['age'] = 3
print(cat)

cat.setdefault('weight',8)
print(cat)

cat.setdefault('age',4)
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 stu in students:
    stu.setdefault('score',0)
    stu.setdefault('tel',0)
print(students)

2), 删 - 删除键值对

"""
del 字典[键]  -  删除字典中指定键对应的键值对(如果键不存在会报错)
字典.pop(键)  -  取出字典中指定键对应的值(如果键不存在会报错)

"""

举例:

print(cat)
del cat['color']
print(cat)

del_value = cat.pop('breed')
print(cat)
print(del_value)

2,字典相关操作和函数

1), 相关操作

#字典不支持 + ,*, 也不支持比较大小的运算符。
#in 和 not in  -  字典的in 和 not in判断的是键是否存在
#键 in 字典
#键 not in 字典
dic1 = {'a':10,'b':20,'c':30}
print(10 in dic1)  #False
print('a' in dic1)  #True

2), 相关函数

"""
len
dict(数据)  -  1)数据本身是一个序列
              2)序列中的元素必须是有且只有两个元素的小序列   
              3)小序列的第一个元素必须是不可变的数据 
"""

举例:

data = [('a',10),('b',20)]
print(dict(data))

data2 = ['ab',range(2),[10,20]]
print(dict(data2))

data3 = ('ab','cd',range(1,3))
print(dict(data3))

#data4 = ('abc',cd',range(,3))
#print(dict(data4))  #报错

字典转换成列表/元组

dic2 = {'a':10,'b':20,'c':30}
print(list(dic2))  #['a', 'b', 'c']

3),字典相关方法

"""
字典.clear()   -  清空字典
字典.copy      -  复制原字典产生一个一摸一样的新字典
item keys values  -  
字典.update(序列)  -  将序列中所有的元素都添加到字典中(如果本身就存在就会覆盖)。序列必须是字典或者能够转换成字典的序列
字典.keys() - 获取字典所有的键,但会一个序列(这个序列不是列表和元组)
"""

举例;

data3 = {'d':100,'e':200}
print(dic2)
dic2.update(data3)
print(dic2)

dic2.update(['xy','mn'])
print(dic2)

dic2.update({'d':1000,'f':2000})
print(dic2)

print(dic2.keys())  #dict_keys(['a', 'b', 'c', 'd', 'e', 'x', 'm', 'f'])
print(dic2.values()) #dict_values([10, 20, 30, 1000, 200, 'y', 'n', 2000])
print(dic2.items()) #dict_items([('a', 10), ('b', 20), ('c', 30), ('d', 1000), ('e', 200), ('x', 'y'), ('m', 'n'), ('f', 2000)])

4), 字典推导式

"""
{键的表达式:值的表达式 for 变量 in 序列}
{键的表达式:值的表达式 for 变量 in 序列 if 条件语句}
"""

练习:通过字典的推导式交换一个字典的键和值

"""{'a':10,'b':20}  ->{10:'a',20:'b'}"""
dic3 = {'a':10,'b':20}
new_dic3 = {dic3[key]:key for key in dic3}
print(new_dic3)

3,集合

1), 什么是集合(set)

"""
集合是容器:将{}作为容器的标志,多个元素用逗号隔开{元素1,元素2,元素3,···}
集合是可变的:集合是无序:
元素:不可变的数据,元素是唯一的(具备自动去重的功能)
"""
1], 空集合
set1 = set()
print(type(set1),len(set1))  #<class 'set'> 0
2], 集合是无序的
print({1,2,3} == {3,2,1})  #True
3], 元素必须是不可变的数据
et2 = {1,'acb',(2,3)}  #{(2, 3), 1, 'acb'}
print(set2)

注意:

set3 = {1,'acb',[2,3]}   #报错
print(set3)
4], 元素是唯一的
set4 = {1,2,3,4,1,2,4}
print(set4)  #{1, 2, 3, 4}

2), 集合元素的增删改查

1], 查 - 遍历
"""
for 变量 in 集合:
    循环体
"""
nums = {23,90,89,78}
for x in nums:
    print(x)
2], 增
"""
集合.add(元素) - 在集合中添加指定元素
集合.update(序列)  -  将序列中的元素全部添加到集合中
"""
nums.add(45)
print(nums)   #{45, 78, 23, 89, 90}

nums.update('abc')
print(nums)   #{'a', 'b', 'c', 45, 78, 23, 89, 90}
3], 删
"""
集合.remove(元素)  -  删除指定元素,如果元素不存在会报错
集合.discard(元素)  -  删除指定元素,如果元素不存在不会报错
"""
nums.remove(89)
print(nums)   #{'a', 45, 78, 'c', 'b', 23, 90}

nums.discard(90)
print(nums)  #{'c', 'a', 45, 78, 'b', 23}

#nums.remove(100)  #报错
nums.discard(100)
print(nums)
4],改 - 集合无法直接修改的元素的值,如果非要改就要将要改的元素删除,添加新的元素

3), 数学集合运算:&(交集),|(并集),-(差集),^(对称差集),>/<(真子集),>=/<=(子集)

1], 集合1 & 集合2 - 获取两个集合的公共元素(获取既在集合1里面又在集合2里面的元素)
num1 = {1,2,3,4,5,6,7}
num2 = {5,6,7}
print(num1 & num2)  #{5, 6, 7}
2],集合1 | 集合2 - 获取两个集合所有的元素
print(num1 | num2)     #{1, 2, 3, 4, 5, 6, 7}
3], 集合1 - 集合2 – 获取集合1中除了包含在集合2中以外的部分
num1 = {1,2,3,4,5,6,7}
num2 = {5,6,7,8,9}
print(num1 - num2)  #{1, 2, 3, 4}
print(num2 - num1)  #{8, 9}
4],集合1 ^ 集合2 - 将两个集合合并,去掉中间公共部分
print(num1 ^ num2)  #{1, 2, 3, 4, 8, 9}
5], 子集(有可能相等)和真子集(真的比它小)
#集合1 > 集合2    --》 判断集合2是否是集合1的真子集
print({10,20,30,40} > {1,2})  #False

num1 = {1,2,3,4,5,6,7}
num2 = {5}
print(num1 > num2)  #True
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值