2.1 散列类型
- 数值类型:int、float、bool——》存储一个数值
- 序列类型:str、list、tuple——》存储多个数据
- 散列类型:无序、内部元素不重复
2.1.1 字典 dict
键值:类似我们生活中的字典,根据拼音找某个字,拼音就是key(键),字就是value(值)
键值对的语法:
键:值——》key:value
'name':'mao'
phone = {'name':'mao','number':'1235','sex':'男'}
输出方式:
字典名[键]
print(phone['name']) # mao
字典的键是不可以重复的,如果重复就会取最后一个重复键的值
dict1 = {'a':1,'b':2,'a':3,'a':4}
print(dict1) # {'a': 4, 'b': 2}
如果键重复则默认是取最后一个键
字典里面的数据是可变的
dict1['b'] = 100
print(dict1) # {'a': 4, 'b': 100}
基本操作
通过key访问value
score = {'语文':89}
print(score['语文']) # 89
通过key添加key-value对
score = {'语文':89}
score['数学'] = 93
score[92] = 5.7
print(score) # {'语文': 89, '数学': 93, 92: 5.7}
通过key删除key-value对
del score['语文']
print(score) # {'数学': 93, 92: 5.7}
del score['数学']
print(score)
通过key修改key-value对,如果对原有键值对赋值,那么新赋的值就会覆盖原来的值
cars = {'BMW':88,'benchi':83,'tesila':95}
cars['benchi'] = 4.3
cars['tesila'] = 3.8
print(cars) # {'BMW': 88, 'benchi': 4.3, 'tesila': 3.8}
通过key判定key-value对是否存在
in 或者not in(基于key来判定的)
print('tesila' in cars) # True
print('baoshijie' in cars) # False
print('BYD' in cars) # False
print('BYD' not in cars) # True
字典的key可以是任意的不可变类型
2.1.1.1 字典的常用方法
1.clear() 清空所有的key-value对
cars = {'BMW':88,'benchi':83,'tesila':95}
print(cars) # {'BMW': 88, 'benchi': 83, 'tesila': 95}
cars.clear()
print(cars) # {}
2.get() 根据键获取值,如果键不存在就返回None,使用中括号语法获取值,如果键不存在会报错
cars = {'BMW':88,'benchi':83,'tesila':95}
print(cars.get('BMW')) # 88
print(cars.get('baoshijie')) # None
print(cars['baoshijie']) # 报错
3.update() 可以使用一个字典所包含的键值对来更新已有字典,再执行update方法时,如果被更新的字典中已包含对应的键值对,那么原来的值会被覆盖,如果被更新的字典中不包含对于的键值对,那么键值对会被添加进去
cars = {'BMW':88,'benchi':83,'tesila':95}
cars.update({'BMW':4.5,'baoshijie':9.3})
print(cars) # {'BMW': 4.5, 'benchi': 83, 'tesila': 95, 'baoshijie': 9.3}
4.
items()——》所有的键值对,返回一个dict_items对象
cars = {'BMW':88,'benchi':83,'tesila':95}
ims = cars.items()
print(ims) # dict_items([('BMW', 88), ('benchi', 83), ('tesila', 95)])
print(type(ims)) # <class 'dict_items'>
print(list(ims)) # [('BMW', 88), ('benchi', 83), ('tesila', 95)]
print(list(ims)[1]) # 访问第二个键值对 ('benchi', 83)
keys()——》所有的键,返回一个dict_keys对象
cars = {'BMW':88,'benchi':83,'tesila':95}
kys = cars.keys()
print(kys) # dict_keys(['BMW', 'benchi', 'tesila'])
print(type(kys)) # <class 'dict_keys'>
print(list(kys)) # ['BMW', 'benchi', 'tesila']
print(list(kys)[1]) # 访问第二个值 benchi
values()——》所有的值,返回一个dict_values对象
可以通过list转换为列表
cars = {'BMW':88,'benchi':83,'tesila':95}
vals = cars.values()
print(vals) # dict_values([88, 83, 95])
print(type(vals)) # <class 'dict_values'>
print(list(vals)) # [88, 83, 95]
print(list(vals)[1]) # 访问第二个值 83
5.pop() 用于获取指定的key对应的value,并且删除这个key-value对
cars = {'BMW':88,'benchi':83,'tesila':95}
print(cars.pop('tesila')) # 95
print(cars) # {'BMW': 88, 'benchi': 83}
6.setdefault() 用于根据键获取值,但是有额外功能,就是当程序要获取的key在字典中不存在时,这个方法会先为这个不存在的key设置一个默认的value,然后在返回key对应的value
cars = {'BMW':88,'benchi':83,'tesila':95}
print(cars.setdefault('baoshijie',92)) # 如果不存在就新增键值对
print(cars) # {'BMW': 88, 'benchi': 83, 'tesila': 95, 'baoshijie': 92}
print(cars.setdefault('BMW',34)) # 如果存在就不会修改字典中内容
print(cars) # {'BMW': 88, 'benchi': 83, 'tesila': 95, 'baoshijie': 92}
2.1.1.2 字典的公共功能
1.长度
info = {'age':12,'shengming':True,'name':'阿呆'}
data = len(info)
print(data) # 3
2.索引(键)
info = {'age':12,'shengming':True,'name':'阿呆'}
print(info['name']) # 阿呆
print(info['shengming']) # True
print(info['age']) # 12
print(info['xxxx']) # 报错
print(info.get('xxx')) # None
3.for循环
info = {'age':12,'shengming':True,'name':'阿呆'}
# for i in info:
# print(i) # 所有键
# for i in info.keys():
# print(i) # 所有的键
# for i in info.values():
# print(i) # 所有的值
for i in info.items():
print(i) # 所有的键值,以元组形式输出
for k,v in info.items():
print(k,v) # 所有的键值
2.1.2 集合 set
用来保存不重复的元素,也就是说集合中的元素都是唯一的,互不相同
语法:
集合名 = {数据1,数据2,数据3...} # 如果有重复数据是不会被添加到内存空间里面的
只能存储不可变类型
注意空类型的表现形式:
li1 = [] # 空列表
tu1 = () # 空元组
str1 = "" # 空字符串
dict1 = {} # 空字典
set1 = set() # 空集合
python中集合主要用来做两件事:去重和数学关系运算
# 去重
li = [1, 2, 3, 4, 5, 6, 4, 4, 5, 6, 7, 8, 9]
li1 = set(li)
li2 = list(li1)
print(li2) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
# print(list(set(li))) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
2.1.2.1 集合的数学运算
运算符操作 | python运算符 | 含义 |
---|---|---|
交集 | & | 取两集合公共的元素 |
并集 | | | 取两集合全部的元素 |
差集 | - | 取一个集合中另一集合没有的元素 |
成员运算 | in 和 not in | 判断一个某个元素是否在或者不在集合中 |
集合1 & 集合2 ——》判断交集
集合1 | 集合2 ——》判断并集
集合1 - 集合2 ——》判断差集
交集:两个集合里面共同有的数据
并集:两个集合里面的全部数据(不包括重复数据,集合本身也不能重复)
差集:集合1-集合2 减去共有的,剩下的就是差集
set1 = {1,2,3}
set2 = {3,4,5}
print(set1 & set2) # {3}
print(set1 | set2) # {1, 2, 3, 4, 5}
print(set1 - set2) # {1, 2}
print(set2 - set1) # {4, 5}
print(3 in set2) # True
print(6 in set1) # False
集合的作用:
1.存储非重复数据
2.用于将序列类型去重,逻辑判断(交集、并集、差集、成员运算)
2.1.2.2 增
add(要添加的对象) ——》无序
s = {'a'}
s.add('b')
print(s)
s.add('c')
print(s)
s.add('d')
print(s)
s.add('e')
print(s)
2.1.2.3 删
1.pop() 随机删除一个元素
只有集合元素是字符串类型时,并且在cmd窗口运行时才会随机删除,平时也就是在pycharm中默认保持删除第一个元素
s.pop()
print(s)
s.pop()
print(s)
2.remove(要删除的元素)
s.remove('1')
print(s) # 报错
s.remove('a')
print(s) #
3.discard() 跟remove类似,但是元素不存在也不会报错
s.discard('aaa')
print(s) # 打印的是原来的集合
4.clear() 清空集合中所有的元素
s.clear()
print(s) # 空集合set()
5.del 集合名 删除集合
del s
print(s) # 上一行删除了变量s,所以在打印s的时候就会报错显示变量不存在
2.1.2.4 公共功能
- 长度 len()
- for循环
一定要记得它们是无下标,不可重复的