day7 字典和集合

本文详细介绍了Python中的字典和集合数据类型。字典作为一种无序且可变的数据结构,允许通过键来存取和组织数据,而集合则是一个无序且不重复的元素集合。文中涵盖了字典的创建、访问、修改和删除操作,以及集合的基本运算如并集、交集和差集。此外,还讨论了字典和集合在实际编程中的应用和重要性。
摘要由CSDN通过智能技术生成

day7 字典和集合

1.字典

1.字典存在的价值 - 可以在同时保存多个意义不同的数据的时候通过key来对数据进行区分和说明

stu = ['小明', 30, '110', 90, 70]
print(stu[0])   # 小明

stu = {'姓名': '小明', 'age': 30, 'tel': '110', 'score': 90, '体重': 70}
print(stu['姓名'])  # 小明

2.什么是字典(dict)
字典是容器型数据类型;
将{}作为容器的标志,里面多个元素(元素是键值对)用逗号隔开: {键1:值1, 键2:值2, 键3:值3,…}
字典的元素:必须是键值对;
键 - 必须是不可变数据, 一般用字符串; 唯一的(功能是对值进行说明)
值 - 任何类型的数据都可以,可以重复。 (值才是字典真正想要保存的数据)
字典是可变的(支持增删改);字典是无序(不支持下标)

空字典:

d1 = {}
print(type(d1), d1)    # <class 'dict'> {}

键不可变:

d2 = {'abc': 100, 12: 200, (10, 20): 300}
print(d2)
# d3 = {'abc': 100, 12: 200, [10, 20]: 300}   # 报错! 列表不能作为key

键是唯一的

d4 = {'name': '小明', 'name':'小花', 'age': 18}
print(d4)   # {'name': '小花', 'age': 18}

值是任何类型的数据

d5 = {'k1': 90, 'k2': 1.23, 'k3': True, 'k4': 'abc', 'k5': [1, 2], 'k6': {'a': 10}, 'k7': lambda x: x*2}
print(d5)

字典无序

d6 = {'name': '张三', 'age': 30}
d7 = {'age': 30, 'name': '张三'}
print(d6 == d7)   # True

2.元素的增删改查

  • 查 - 获取字典的值

1)查单个值

字典[key] - 获取指定key对应的值

字典.get(key) - 获取字典中指定key对应的值

字典.get(key, 默认值) - 获取字典中指定key对应的值;如果key不存在不报错,把默认值返回

dog = {'name': '旺财', 'sex': '公', 'color': '黄色', 'breed': '土狗', 'age': 2}
print(dog['name'], dog['breed'])
# print(dog['height'])    # KeyError: 'height'

print(dog.get('age'))
print(dog.get('height'))   # None

print(dog.get('color', '黑色'))   # 黄色
print(dog.get('height', 0))     # 0

2)遍历

for 变量 in 字典:

​ 循环体

注意:变量取到的是字典的每个key

  • 增/改 - 添加键值对/修改键对应的值

字典[key] = 值 - 如果key不存在就是添加 key:值 对应的键值对;不过key存在就是修改指定key对应的值

增加

computer['cup_num'] = 4
print(computer)  # {'brand': '联想', 'color': '黑色', 'price': '5300', 'ram': '16', 'cup_num': 4}

修改

computer['color'] = '灰色'
# print(computer)  # {'brand': '联想', 'color': '灰色', 'price': '5300', 'ram': '16', 'cup_num': 4}

2)字典.setdefault(key, value) - 添加键值对

computer.setdefault('size', 14)
print(computer)  # {'brand': '联想', 'color': '灰色', 'price': '5300', 'ram': '16', 'cup_num': 4, 'size': 14}
  • 删 - 删除键值对

1)del 字典[key] - 删除指定key对应的键值对

computer = {'brand': '联想', 'color': '黑色', 'price': '5300', 'ram': '16'}
del computer['ram']
print(computer)   # {'brand': '联想', 'color': '黑色', 'price': '5300'}

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

color = computer.pop('color')
print(computer)   # {'brand': '联想', 'price': '5300'}
print(color)   # 黑色

3.字典相关操作

  • 运算符

字典不支持+、*、>、<、>=、<=, 只支持 == 和 !=

d1 = {'a': 10, 'b': 20}
d2 = {'b': 20, 'a': 10}
print(d1 == d2)    # True
  • in 和 not in

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

d3 = {'a': 10, 'b': 20, 'c': 30, 100: 200}
print('a' in d3)    # True
print(10 in d3)    # False
print(100 in d3)     # True
  • 相关函数

*了解了解

sum,max,min,sorted - 针对的操作对象是字典的key

print(sum({10:1, 20:2, 30:3}))   # 60

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

d3 = {'a': 10, 'b': 20, 'c': 30, 100: 200}
print(len(d3))   # 4

dict(数据) - 将指定数据转成字典

数据 - a. 数据本身是序列 b. 序列中的每一个元素是小序列 c. 小序列中元素的个数是2

seq = [(1, 2), (10, 20), (100, 200), (1000, 2000), ('abc', 123)]
d4 = dict(seq)
print(d4)  # {1: 2, 10: 20, 100: 200, 1000: 2000, 'abc': 123}

字典转列表

computer = {'brand': '联想', 'color': '黑色', 'price': '5300', 'ram': '16'}
print(list(computer))  # ['brand', 'color', 'price', 'ram']

4.字典相关方法

字典.clear() - 清空字典

字典.copy() - 赋值字典产生一个一模一样的新字典并返回

p1 = {'name': '小明', 'age': 18, 'gender': '男'}
p2 = p1
print(p2)  # {'name': '小明', 'age': 18, 'gender': '男'}
p1['name'] = '小花'
print(p2)  # {'name': '小花', 'age': 18, 'gender': '男'}

*dict.fromkeys(序列, 值) - 创建一个新的字典,将序列中的元素作为字典的key,每个key对应的值就是指定值

d1 = dict.fromkeys('abc', 100)
print(d1)   # {'a': 100, 'b': 100, 'c': 100}

d2 = dict.fromkeys(['name', 'age', 'sex'])
print(d2)  # {'name': None, 'age': None, 'sex': None}

d3 = dict.fromkeys(['name', 'age', 'sex'], 0)
print(d3)   # {'name': 0, 'age': 0, 'sex': 0}

字典.items() - (同时获取字典的key和值)将字典转换后才能一个序列,序列中的元素是每个键值对对应的小序列

student = {'name': '小明', 'age': '18', 'gender': '男', 'score': 90}
print(student.items())   # dict_items([('name', '小明'), ('age', '18'), ('gender', '男'), ('score', 90)])
print(list(student.items()))   # [('name', '小明'), ('age', '18'), ('gender', '男'), ('score', 90)]

遍历字典的时候同时获取键和值(效率低)

for key, value in student.items():
    print(key, value)
# 练习:通过列表推导式交换一个字典的key和value的位置
list1 = {'a': 10, 'b': 20, 'c': 30}
list2 = dict([(value, key) for key, value in list1.items()])
print(list2)

字典.keys() - 获取字典所有的key(返回一个序列)

print(list1.keys())  # dict_keys(['a', 'b', 'c'])

字典.values() - 获取字典所有的值(返回一个序列

print(list1.values())  # dict_values([10, 20, 30])

5.集合

什么是集合(set)

容器:将{}作为容器的标志,多个元素用逗号隔开: {元素1,元素2, 元素3,…}

元素:不可变的;惟一的

可变的:无序的

s1 = {}
print(type(s1))   # <class 'dict'>

空集合

s2 = set()
print(type(s2), len(s2))  # <class 'set'> 0

集合元素不可变

s3 = {90, 'abc', (1, 2)}
print(s3)

集合元素是唯一的

s5 = {1, 2, 3, 1, 2, 1}
print(s5)  # {1, 2, 3}

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

并集 - A和B的并集是将A和B的元素放到一起构成的新集合

A = {1, 2, 3, 4, 5, 6}
B = {4, 5, 6, 7, 8}
C = A | B
print(C)

交集 - A和B呃交集,写作A&B,既属于A、有属于B的所有元素组成的集合

A = {1, 2, 3, 4, 5, 6}
B = {4, 5, 6, 7, 8}
C = A & B
print(C)

差集 - 两个集合也可以相’减’。写作 B-A 是属于B的,但不属于A的所有元素组成的集合

A = {1, 2, 3, 4, 5, 6}
B = {4, 5, 6, 7, 8}
C = A - B
print(C)

对称差集 - 在集合A和集合B中,只包含在A中和只包含在B中的元素的集合

A = {1, 2, 3, 4, 5, 6}
B = {4, 5, 6, 7, 8}
C = A ^ B
print(C)

子集

A = {1, 2, 3, 4, 5}
B = {4, 5}
print(A >= B)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值