2021-9-24

字典和字集合(2021-9-24)

一、字典相关操作和方法

1、字典不支持:+、*、>、<、>=、<=
2、字典支持:==、!=
print({'a':10, 'b':20} == {'b':20, 'a':10})           # True
3、in和not in

键 in 字典 - 判断字典中是否存在指定的键

d1 = {'a':10, 'b':20, 'c':30}
print(30 in d1)                                       # False
print('c' in d1)                                      # True
4、dick

dick(数据) - 将数据转换成字典
数据的要求:1)数据本身是一个序列
2)序列中的元素必须是长度为2(一个为键,一个为值)的小序列
3)小序列的第一个元素必须是不可变的

result = dict((('你好', 3), 'ab', ['b', 100]))             # {1: 2, 'a': 'b', 'b': 100}
print(result)

注意:将字典转换成列表或者元组的时候,将字典的键作为列表、元组中元素

d1 = {'你':10, '好':20, '吗':30}
print(list(d1))                                           # ['你', '好', '吗']
5、相关方法
1)字典.clear() - 清空字典
d1.clear()
print(d1)                                                 # {}
2)字典.copy()
stu1 = {'name':'小明','gender':'男' }
stu1.copy()
print(stu1)                                               # {'name': '小明', 'gender': '男'}
3)字典.item() - 将字典中的元素转换成元组,返回一个新的序列

{键1:值1, 键2:值2} -> [(键1:值1), (键2:值2)]

stu1 = {'name':'小明','gender':'男' }
result = stu1.items()
print(result)                                             # dict_items([('name', '小明'), ('gender', '男')])
print(list(result))                                       # [('name', '小明'), ('gender', '男')]

练习 使用列表推导式,将一个字典的值全部乘以10

d2 = {'a': 2, 'b': 34, 'c': 21}
{'a': 20, 'b': 340, 'c': 210}

字典推导式: {键值对 for 变量 in 序列 if 条件语句}

方法一:
print({x:d2[x]*10 for x in d2})                           # {'a': 20, 'b': 340, 'c': 210}
方法二:
d3 = {x:y*10 for x, y in d2.items()}
print(d3)
方法三(列表推导式):
d3 = dict([(x, y*10) for x, y in d2.items()])
print(d3)

练习2:使用推导式,交换字典的键和值



d2 = {'a': 2, 'b': 34, 'c': 21}
{2: 'a', 34: 'b', 21: 'c'}
d3 = {y: x for x, y in d2.items()}
print(d3)
4)字典.keys() - 获取字典所有的键,返回一个新的序列
print(d2.keys())                                          # dict_keys(['a', 'b', 'c'])
5)字典.values() - 获取字典所有的值,返回一个新的序列
print(d2.values())                                        # dict_values([2, 34, 21])
6)字典.setdefault(键, 值) - 在字典中添加一个键值对(如果字典中已经存在这个键值对,不会执行修改操作)
字典[] = 值
d1 = {'a': 10}
print(d1)
d1['b'] = 100
print(d1)                                                 # {'a': 10, 'b': 100}
d1.setdefault('b', 100)
print(d1)                                                 # {'a': 10, 'b': 100}
d1['a'] = 100
print(d1)                                                 # {'a': 100}
d1.setdefault('a', 100)
print(d1)                                                 # {'a': 10}

练习:添加没有折扣的商品折扣为1

goods_list = [
    {'name': '泡面', 'price': 4, 'discount': 0.9, 'count': 100},
    {'name': '火腿肠', 'price': 2, 'count': 120},
    {'name': '矿泉水', 'price': 1, 'count': 500},
    {'name': '面包', 'price': 5, 'count': 120, 'discount': 0.75}
]
for gooods in goods_list:
    gooods.setdefault('discount', 1)
print(goods_list)
7)字典.update(序列) - 将序列中的元素全部添加到字典中

序列 - 是字典或者是能转换成字典的序列

d1 = {'a': 10, 'b': 20}
d2 = {'name': '小明', 'age': 18}
d1.update(d2)
print(d1)                               # {'a': 10, 'b': 20, 'name': '小明', 'age': 18}
d1.update(['21', (1,2)])
print(d1)                               # {'a': 10, 'b': 20, 'name': '小明', 'age': 18, '2': '1', 1: 2}

二、集合

1、什么是集合(set)

集合是容器型数据类型(序列),将{}作为容器的标志,里面多个元素用逗号隔开:{元素1, 元素2, 元素3, …}
集合是可变的;集合是无序的
元素 :a、必须是不可变的数据;
b、唯一

1)空集合
s1 = set()
print(len(s1), type(s1))                    # 0 <class 'set'>
2)集合元素必须是不可变的数据
s2 = {1, 'abc', (32, 54)}
print(s2)                                   # {1, 'abc', (32, 54)}
s2 = {1, 'abc', [32, 54]}
print(s2)                                 # 报错
3)集合无序
print({1, 2, 3} == {3, 2, 1})               # True
4)元素是唯一的
s3 = {1,23,3,2,3,2,1}
print(s3)                                   # {1, 2, 3, 23}
2、集合的增删改查(了解)
1)查 - 只能遍历
hobby = {'玩游戏', '看电影', '打篮球', '听歌'}
for a in hobby:
    print(a)
2)增:

集合.add(元素)
集合.update(序列)

hobby.add('游泳')
print(hobby)                                # {'看电影', '打篮球', '听歌', '游泳', '玩游戏'}
hobby.update(('乒乓球', '羽毛球'))
print(hobby)                                # {'游泳', '玩游戏', '乒乓球', '听歌', '打篮球', '羽毛球', '看电影'}
3)删

集合.remove(元素) - 如果元素不存在会报错
集合.discard(元素) - 如果元素不存在不会报错

hobby.remove('听歌')
print(hobby)                                # {'玩游戏', '游泳', '羽毛球', '乒乓球', '打篮球', '看电影'}
hobby.discard('玩游戏')
print(hobby)                                # {'看电影', '打篮球', '羽毛球', '游泳', '乒乓球'}

三、python中的集合支持数学集合运算

s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6, 7}
1、并集 - |

集合1 | 集合2 - 将两个集合合并成一个集合

result = s1 | s2
print(result)                                     # {1, 2, 3, 4, 5, 6, 7}
2、交集 - &

集合1 & 集合2 - 获取两个集合的公共部分,产生一个新的集合

result = s1 & s2
print(result)                                     # {3, 4}
3、差集 - -

集合1 - 集合2 - 获取集合1中去掉包含在集合2中的元素,剩下的元素

s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6, 7}
result = s1 - s2
print(result)                                     # {1, 2}
4、对称差集 - ^

集合1 ^ 集合2

print(s1 ^ s2)                                    # {1, 2, 5, 6, 7}
5、判断子集关系

子集:>=、<=
真子集:>、<
集合1 > 集合2 - 判断集合2是否是集合1的真子集
集合1 < 集合2 - 判断集合1是否是集合2的真子集

s3 = {10, 20, 30}
真子集:{10, 20}{20, 30}{10, 30}{10}{20}{30}、空集
子集:{10, 20}{20, 30}{10, 30}{10}{20}{30}{10, 20, 30}、空集
print({100, 200, 300} > {1, 2})                   # False
print({100, 200, 300} > {100, 200})               # True

练习、用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)

math_students = {'张三', '李四', '王二', '武大'}
lang_students = {'张三', '武大', '牛牛'}
engl_students = {'李四', '王二'}
  1. 求选课学生总共有多少人
s1 = (math_students | lang_students | engl_students)
print(len(s1)
  1. 求只选了第一个学科的人的数量和对应的名字
1. s2 = math_students - lang_students - engl_students
   print(s2)
2. 
  1. 求只选了一门学科的学生的数量和对应的名字
s3 = (math_students ^ lang_students ^ engl_students)
print(s3)
  1. 求选了三门学生的学生的数量和对应的名字
s5 = (math_students & lang_students & engl_students)
print(s5)
  1. 求只选了两门学科的学生的数量和对应的名字
s4 = s1 - s3 - s5
print(s4)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值