day05
字典
键值对数据 dict dict = {'键':'值'}
存储数据 字典的查找快一些(消耗的内存大)
不可哈希的,就是可变的数据
可变的数据不能哈希 不可变的数据能哈希
字典的键:不可变数据 类型 键不能重复 重复的话就会把值覆盖
字典的值 :可以随意
查 :
print(dic['25']) #通过键去查找值
增:
dic[11] = '小米'
dic.setdefault(11,'华为')
#1.先去字典中通过11这个键去查有没有 就是None
#2.如果是值 就不进行添加
#3.如果是None,就添加返回的是添加的值
删:
del dic #删除整个字典
del dic[键] #通过键删除
dic.pop('键') #pop通过指定键删除 pop也有返回值 返回的被删除的值
dic.clear() #清空
dic.popitem() #随机删除 python3.6删除最后一个 python3.5中随机删除
改:
dic.update(字典)更新 被更新的内容如果在要更新的内容中那值就回覆盖
两个字典,都没一样的是合并
dic2['33'] = 'tsp'是字典中没有的时候才叫增,如果字典中这个键存在就叫做修改
查:
print(dic2['33']) #通过键查找 如果键不存在 就报错
print(dic2.get(2)) #通过键查找 如果不存在不会报错返回None
print(dic.setdefault('33')) #不存在返回None
其他操作:
dic2 = {'33':'gg','66':'pp'}
for i in dic2:
print(i)
for i in dic2:
print(dic2.get(i))
print(dic2.keys())高仿列表dic_key(['33','66'])不能使用下标
print(dic2.vaules())高仿列表dic_value(['gg','pp'])不能使用下标
for i in dic2.values():
print(i)
for i in dic2.items():
print(i)
for k,v in dic.items():
print(k)
print(v)
解构:
a,b,c = 1,2,3 '456' [7,8,9] (7,8,9) {'1':8,'2':9,'3':0}
# 面试题 用一行交换a,b的值
a = 10
b = 20
a,b = b,a
print(a,b)
keys() #获取所有的键 高仿列表
values() #获取所有的值 高仿列表
item() #获取键值 以元组的形式显示
补充:
dic2 = {'33':'gg','66':'pp'}
ret = dic2.get('qq',你傻啊,没有还要拿)
ret = dic2.pop('qq','没有')
这是坑:
dic3 =dict.fromkeys([1,2,3,4,5,6],[1,2,3])
print(dic3)
第一个参数是键 要是可迭代的对象
第二个参数是值,值是无所谓是因为创建的新字典的值用的都是一个值是一个可变数据类型
字典的嵌套:
dic1 = dic['陈冠希']['阿娇']
集合:
set 集合 存储数据 天然去重 无序不能使用索引
se = {1,2,3,45,234,12,32,12}
列表有点 没有值的字典
面试题
lst = [1,2,3,4,12,3,4]去重
print(list(set(lst)))
se.add(6)
se.update('123') 可迭代的对象
se.clear
se.pop
se.remove(4) 通过内容删除
s1 = {'刘能','赵四','皮革厂'}
s2 = {'刘科长','冯乡长','皮革厂'}
s1 & s2 交集
s1 | s2 并集
s1 - s2 差集 不显示共有的
s1 ^ s2 反差集 显示不共有的
s1 = frozenset(['','','',''])
print(s1)