字典(dict)
1.什么是字典?
容器型数据类型(序列)
特点:可变(支持增删改),无序的(不支持下表操作)
2.字典中的元素
元素都是键值对
字典储存数据主要是为了存值,键只是为了区分不同的值而存在的
键值对中的键 -- 不可变,唯一的。 --- 可用数字,字符串,字典。列表可变则不行
键值对中的值 -- 和列表元素一样,任何数据都可以作为值
备注:如果同一个键被赋值两次,后面的值会被记住
3.字典的增删查改
1)查
a. 获取单个元素的值
字典[key] -- 获取字典中指定key对应的值,如果key值不存在会报错
字典.get(key)
字典.get(key,默认值) -- 当key不存在则不会报错,返回None。如果设置了默认值就返回默认值
b.遍历
dog = {}
for i in dog:
print(i, dog[i]) -- 拿到键值
for value in dog.values():
print(i) -- 直接拿值
for key,value in dog.items():
print(key,value) --- 同时拿到键和值
备注:后面的这两个是比较浪费内存和cpu的,所以建议使用上面的
dict1 = {'a':10,'b':20,'c':30}
q = dict1((dict1[key], key)for key in dict1)
print(q)
2)增,改
增 -- 添加键值对;改 -- 修改字典中,某个key对应的值
语法:字典[key] = 值 -- 值不存在就向里面加值,当key存在就修改字典中key对应的值
3)删 -- 没有remove
a.del 字典[key] -- 删除指定key对应的值
b.字典.pop(key) -- 取出字典中key对应的值,返回取出后字典中的剩余值
4.字典的相关操作以及运算
1)字典不支持 +,*,>,<,>=,<=
2)相关操作:in 和 not in 和 max() sum() len()
key in 字典 -- 判断字典中是否存在某个键
key not in 字典 -- 判断字典中是否不存在某个键
只针对key的操作:
max() -- 比较字典中的键的大小(Ascll字符比较)
sum() -- 只针对键是数字的字典
len() -- 计算键的总数
list() -- 转换成列表,只是把key转换成字典
3)dict(数据) -- 将指定数据转换成字典
数据要求:a.数据本身是一个序列 b. 系列中的元素必须是有且只有两个元素的小序列。
print(dict([[1,2],(2,3),'ab'])) -- 备注:里面就是一个列表对象再包含3个对象
4)dict.fromkeys(序列,default = None) -- 创一个新的字典,将序列中的元素作为字典的key,将default作为每个key对应的值
new_dict = dict.fromkeys('abc')
print(new_dict) --- {a:None,b:None,c:None}
5)字典.items() -- 将字典中的键值对转换成元组作为容器中的元素
备注:与dict(数据) -- 相反
6)字典.update(列表,元组,字典等) --- 即添加序列
集合(set)
集合是容器型数据类型(序列),将{ }作为容器的标志,多个元素用逗号隔开
特点:可变(增删),无序(不支持下标操作)-- 元素不可变,集合可以变
{ } -- 表示空字典
{1,3,100}
1)元素 - 不可变的数据;同一个元素只能有一个(唯一性)
集合自带去重功能:
set1 = {1,2,3,1,2}
print(set1) -- {1,2,3}
scores = {12,23,45,23,45,67}
scores = list(set(scores))
print(scores)
2)集合元素的增删改查
a. 查 - 查只支持遍历,不能单独获取具体某一个元素(本质是通过下标来遍历,内部进行)
注意:遍历后的数据顺序可能会不一样
b. 增:
集合.add(元素) -- 在集合中添加一个元素
集合.update(序列) -- 将序列中所有的元素添加到集合里面
列表 元组,字典,字符串等。。。
c.改(集合不支持改的操作)
3)集合的相关操作:
a. 求并集:集合1 | 集合2 -- 将两个集合合并,并去重
b. 求交集:集合1 & 集合2 -- 获取两个集合的公共元素
c. 求差集:集合1 - 集合2 -- 获取集合1中除了集合2中与集合1内相同的元素,剩下的部分
d. 对称差集:集合1 ^ 集合2 -- 两个集合除了公共部分剩下的部分
e. 集合1 > 集合2 -- 判断集合1是否包含集合2
f. 集合1 < 集合2 -- 判断集合2 是否包含集合1