1.字典
格式:{键值对1,键值对2,键值对3...}
- 字典是容器类型(序列),以键值对作为元素字典里的元素都是以键值对儿的形式出现的
- 键:值(key:value)------键值对
一个字典类型的数据中,键(key):要唯一(即两个相同的键不能出现在同一个字典变量中),不可变的;值(value):可以不唯一,可以是任意类型的数据
1.1、申明一个字典
- a.申明一个字典变量,若有多个相同的键,程序会自动将最后一个同名键对应的值保留作为第一个同名键对应的值,其他所有同名键的值都被覆盖
dict1={1:100,'a':97,True:'bool',(10,10):'start','a':'A'}
print(dict1) #{1: 'bool', 'a': 'A', (10, 10): 'start'}
#键 True会自动转换成1,覆盖并替换第一个键值对
- 与列表的区别:可以对里面的元素进行说明
person1=['王龙',18,5]
person2={'name':'王龙','年龄':18,'工龄':5}
- 字典中,键(key)必须是不可变的类型,不能是列表
dict1={1:100,'a':97,True:'bool',(10,10):'start',[1,2]:'a'}
print(dict1) #TypeError: unhashable type: 'list'
- 申明一个空字典
a={}
1.2 字典的增删改查
1.2.1 查(获取值)
获取字典元素对应的值:字典存数据,实质还是存 值(value),key是获取value的手段。
方式一
- 格式: 字典[key] -----通过key获取值(value)
person2={'name':'王龙','age':18,'工龄':5}
print(person2['name'],person2['age'])
- 通过key获取值的时候,如果key不存在,
会报错keyerror
person2={'name':'王龙','age':18,'工龄':5}
print(person2['sex']) #Keyerror
方式二
- 格式: 字典.get(key)
person2={'name':'王龙','age':18,'工龄':5}
print(person2.get('age'))
- 如果key 不存在,
不会报错,返回none
总结:
- 确定key肯定存在的时候用字典.[key]语法获取value,
- key值可能不存在,不存在的时候不希望报错,而是想要对呀进行特殊处理的时候用get获取value
例:想要获取sex,如果没有就默认‘男’
person={'name':'王龙','age':18}
if person.get('sex')!=None:
print=(person['sex'])
else:
print('男')
1.2.2遍历字典
- 遍历字典直接取到的是字典所有的key
例:
dog={'name':'旺财','color':'yellow','age':3}
for key in dog:
print(key,end=' : ')
print(dog[key])
输出:
name : 旺财
color : yellow
age : 3
1.2.3 改(修改key对应的value)
格式: 字典[key]=新值
- key本来就在字典中存在,就是修改
说明:字典中只有这一种语法
1.2.4 增加(增加字典中的键值对)
格式: 字典[key]=值
- key本来就在字典中不存在,就是增加
- 字典的改与增加的格式一样,关键在于key在原字典中是否存在
例:
dog={'name':'旺财','color':'yellow','age':3}
dog['name']='大黄'
print(dog) #{'name': '大黄', 'color': 'yellow', 'age': 3}
dog['type']='藏獒'
print(dog) #{'name': '大黄', 'color': 'yellow', 'age': 3, 'type': '藏獒'}
1.2.5删(删除键值对)
-
格式一 del 字典[key]
直接删除
dog={'name':'旺财','color':'yellow','age':3}
del dog['age']
print(dog) #{'name': '旺财', 'color': 'yellow'}
-
格式一 字典.pop(key)
将key对应的键值对取除,并将对应的值保存起来
# dog={'name':'旺财','color':'yellow','age':3}
# color=dog.pop('color')
# print(dog,color,type(color),sep=',') #{'name': '旺财', 'age': 3},yellow,<class 'str'>
2. 字典的相关运算
2.1 字典不支持 '+'和 '*'
2.2 支持 in 和 not in: 判断key是否存在
computer={'brand':'联想','color':'black'}
print('color'in computer) #True
2.3 len() 指的是有多少对键值对
# computer={'brand':'联想','color':'black'}
# print(len(computer)) #2
2.4方法
2.4.1 字典.clear()
- 删除字典中所有键值对
2.4.2 字典.copy()
- 拷贝字典中所有的元素,并放在一个新的字典中
dict1={'a':1,'b':2}
dict2=dict1 #将dict1的地址赋给dict2,两个变量指向同一块内存空间
dict3=dict1.copy() #将dict1的值拷贝到一个新的内存区域,再将新的
#地址赋给dict3
dict1['a']=100
print(dict2) #{'a': 100, 'b': 2}
print(dict3) ##{'a': 1, 'b': 2}
2.4.3 dict.fromkeys(序列,默认值=None)
- 将序列中的每个值作为key,默认值为value新建字典
- 创建一个新得字典,注意默认值可以不写,写的话只能写一个数据
print(dict.fromkeys('abc',0)) #{'a': 0, 'b': 0, 'c': 0}
2.4.5 字典.key()
- 获取字典中所有的key,以列表的形式保存
dict1={'a':1,'b'=2}
all_key=dict1.keys()
print(all_key) #dict_keys(['a', 'b'])
2.4.5 字典.value()
- 获取字典中所有的value
2.4.6 字典.items()
dict1={'a':1,'b':2}
print(dict1.items()) #dict_items([('a', 1), ('b', 2)])
for key,value in dict1.items()
print(key,value) #a 1
#b 2
- 以上方式不推荐使用,会大量消耗cup的资源,影响软件性能
2.4.7 字典.setdefault(key,默认值=None)
- 给字典添加键值对,如果key已存在,就不产生影响
dict1={'a':1,'b':2}
dict1.setdefault('ab','abc')
dict1.setdefault('aa')
print(dict1) #{'a': 1, 'b': 2, 'ab': 'abc', 'aa': None}
2.4.8 字典1.update(字典2)
- 将字典2中的键值对更新到字典2中
- 更新方式:如果字典2 中的key在字典2中是存在的,就用字典2中的值更新字典1中的值,不存在就添加到字典1中
dict1={'a':1,'b':2,'c':3}
dict1.update({'a':100,'d':27})
print(dict1) #{'a': 100, 'b': 2, 'c': 3, 'd': 27}
3.字典与列表
什么时候使用列表,什么时候用字典
- 保存的多个数据的类型是
一个类型
的用列表
- 保存的多个数据的类型是
多个类型
时就用字典
4.集合
- 集合是python中的一种容器类型;无序的,可变的,值唯一
- 集合的内容;除了容器类型的数据,其他基本都行(数字,布尔,字符串),和字典的key的要求一样
4.1.声明一个集合
set_1={1,'abc',100,100} #值唯一
print(set_1,type(set_1)) #{'abc', 1, 100} <class 'set'>
4.2 将其他序列转换成集合
str_1='abscbcsaaaa'
set_2=set(str_1) #将其他序列转换成集合,自带一个去重的功能
print(set_2) #{'s', 'c', 'b', 'a'}
4.3 集合的增删改查
4.3.1查(获取集合的元素)
- 集合是不能单独获取其中的某一个元素的 只能通过for循环取遍历
set_1={1,'abc',100,100}
for item in set_1:
print(item)
输出:
1
abc
100
4.3.2 增(添加元素)
集合.add(元素)
set_1={1,'abc',100}
set_1.add('good')
print(set_1) #{1, 'good', 100, 'abc'}
集合.update(集合2)
- 将集合2中的元素添加到集合1中
set_1={1,'abc',100}
set_1.update({5,7,6})
print(set_1) #{1, 100, 5, 6, 7, 'abc'}
4.3.3删
集合.remove(元素)
set_1={1,'abc',100}
set_1.remove('abc')
print(set_1) #{1, 100}
集合.clear()
- 删除所有元素
4.4 改(改不了)
5.数学相关的集合运算
5.1判断包含情况
- 集合1>=集合2 : 判断集合1是否包含集合2
- 集合1<=集合2 :判断集合2中是否包含集合1
print({1,2,3,4,1,5,6,7}>={1,2,3}) #True
5.2求并集 |
set_1={1,2,3,4,5,9,34}
set_2={3,232,37,4,9,6,34}
print(set_1 | set_2) #{1, 2, 3, 4, 5, 34, 37, 6, 9, 232}
5.3求交集: &
set_1={1,2,3}
set_2={3,4,5}
set_3={4,5,6}
print(set_1&set_2 , set_1&set_3) #{3} set()
5.4求差集 -
5.5求补集 ^
- 求两个集合中除了公共部分以外的其他部分