字典
1)释义
字典是容器型数据类型(序列); 将{}作为容器的标志,多个元素之间用逗号隔开(元素是键值对): {键1:值1, 键2:值2, ...}
字典是可变的,无序的
2)字典元素
字典中的元素必须都是键值对,以'键:值'的形式存在。(存数据实质想存是值,键是用来区分不同的值)
键 - 不可变(一般使用字符串)[列表不能作为键],唯一
值 - 任何类型的数据都可以,值可以相同
键相同时后出现的键值为准
获取方法
dict = {'姓名':'小张','年龄':18,'性别':'男','身高':175,'体重':60,'成绩':99}
print(dict['年龄'])如果key不存在会报错
print(dict.get('年龄'))如果key不存在不会报错
print(dict.get('年龄',20))如果key不存在不会报错,会返回设定默认值
遍历
for key in 字典:#效率最高的遍历
循环体
dog1 = {'name': '旺财', 'age': 3, 'color': 'yellow', 'breed': '土狗', 'gender': '公狗'}
for key in dog1:
print(key, dog1[key])
print(dog1.items())#能遍历,但效率低
for key, value in dog1.items():
print(key, value)
增、改
字典[key] = 值 - 当key存在,修改key对应的值;当key不存在,添加'key:值'的键值对
dict = {'姓名':'小张','年龄':18,'性别':'男','身高':175,'体重':60,'成绩':99}
dict1['姓名'] = '小刘'
删
a. del 字典[key] - 删除字典中指定key对应的键值对
b. 字典.pop(key) - 取出字典中指定key对应的值, 返回值就是被取出的值
del dict1['年龄']
my_score = dict1.pop('成绩')
相关操作
1)运算符
==,!=,is(地址是否一致)
字典是无序的所以:
dict1 = {'a':1,'b':2}
dict3 = {'b':2,'a':1}
dict1 == dict3
2)in 和 not in(判断key是否存在)
key in 字典:
key not in 字典:
3)len和dict:
len(字典)求字典键值对个数
dict(数据) 数据转字典的数据要求:
1、数据本身是序列
2、序列中的元素也是序列
3、小序列中第一个数据必须不可变
4)字典转列表
list(字典)只会将所有key值转换为列表
5)相关方法
复制时不能直接赋值而是 dict.copy()
此处函数名为dict不可更改 dict.fromkeys(序列,值)KEY对应的值只有相同
创建新的字典键为序列 值为值。
字典.key()、字典.value()、字典.items()
获取所有键、获取所有value、获取所有元素(每对键值组成一个元组,返回一个序列)
字典.setdefault()当键存在时不会修改该值,为字典添加默认键值对。
字典1.update(字典2)将字典2中的键值对添加至字典1中,若1中键存在则跟新对应值。
集合
1释义
集合是容器型数据类型;将{}作为容器标志,多个元素用逗号隔开: {元素1, 元素2,...}
集合是可变的、无序的
集合中的元素必须是不可变的数据,而且是唯一(自带去重功能)
空集合:set1 = set()
查:不能取值,只能for循环全部遍历获取
增:set.add(元素)
set.update(序列)
序列为字典时添加key
删: 集合.remove(元素) - 删除集合中指定元素
names1 = {'张三', '李四', '小明', 'Tom'}
names1.remove('小明')#元素不存在报错
print(names1)
name1.disccard()#元素存在不会报错
2. 集合相关操作
1)运算符: 支持判断相等的==, !=
2) in / not in
names1 = {'张三', '李四', '小明', 'Tom'}
print('张三' in names1) # True
3)len、max、min、sum、sorted、set
3.数学集合运算(重要!)
python中的集合直接支持数学的集合运算: |(并集), &(交集), -(差集), ^(对称差集), >/<(判断包含)
set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 7, 8}
1) 集合1 | 集合2 - 将两个集合合并在一起
set3 = set1 | set2
print(set3) # {1, 2, 3, 4, 5, 6, 7, 8}
2) 集合1 & 集合2 - 获取两个集合的公共部分
set4 = set1 & set2
print(set4) # {4, 5, 6}
3) 集合1 - 集合2 - 获取集合1中除了集合2剩下的部分
set5 = set1 - set2
print(set5) # {1, 2, 3}
4) 集合1 ^ 集合2 - 获取集合1和集合2除了公共部分以外的部分
set6 = set1 ^ set2
print(set6)
5) 集合1 > 集合2 - 判断集合1中是否包含集合2(判断集合2是否是集合1的子集)
print({10, 20, 30, 40} > {1, 2}) # False
print({2, 10, 20, 30, 40, 1} > {1, 2}) # True
print({2, 10, 20, 30, 40} > {1, 2}) # False