一.字典
1.字典的定义
字典是不可变的,是用hash值来存储的.字典的key必须是不可变的(可哈希)
dict = {key1:value1 , key2:value2}
2.字典的增删改查
增
直接dict[newkey]="newvalue"
dict.setdefault("key","value")
setdefault执行流程:
判断你的key是否存在,如果已经存在就不再新增.如果不存在,执行新增操作
dic = {"jay":"周杰伦","jj":"林俊杰"}
dic["j"] = "我也不知道" #dic[newkey] = "newvalue"
#dic.setdefault("j","我也不知道")
print(dic)
删
dict.pop("key") 指定删除key和对应的value
dict.popitem() 从后往前删 在早期字典是无序的,所以早期是随机删除
del dict[key] 指定删除key和对应的value
dict.clear() 清空字典
dic = {"张艺谋":"红高粱","李安":"断背山","陈凯歌":"霸王别姬"}
dic.pop("张艺谋") #指定删除
dic.popitem() #删除最后一个 python早期版本是无序的
del dic["李安"] #指定删除
dic.clear() #清空
print(dic)
改
dict[oldkey] = newvalue
dict1.update(dict2) #把dict2的内容更新到dict1中
查
直接使用key就能查到value
dict.get(key,None) 当key存在查询value,不存在返回None(None可以自定义)
dict.setdefalut() 第一个功能是添加(当key不存在).第二个功能是查询(当key存在)
setdefalut整个执行流程:
判断给的key是否存在. 如果存在. 就不执行新增流程.直接查询出这个key对应的value
如果key不存在. 先执行新增操作. 再使用key把对应的value查询出来
dic = {"刘能":"王小利","赵四":"刘晓光","王木生":"范伟"}
print(dic["刘能"])
print(dic.get("王木生"))
print(dic.get("刘能呢","没有"))
setdefault 两个功能 添加和查找
检查是否有key 如果没有,先添加到字典,再使用key查询value
如果有key,直接查询key的valu
s = dic.setdefault("赵四四","流光")
print(s)
3.字典的嵌套
一层一层寻找,和列表一样
4.字典的遍历
直接for循环
for key in dic: # 直接循环字典拿到的是key, 有key直接拿value
print(key)
print(dic[key])
dict.keys() 拿到字典的每一个key
dict.values() 拿到字典的每一个value
dict.items() 拿到字典的所有键值对
for k, v in dic.items(): # 遍历字典最简单的方案
print(item) # ('赵四', '刘晓光')
k, v = item # 解构
k = item[0]
v = item[1]
print(k, v)
遍历字典的两种方法:
dic = {"周五":"等着放假","周六":"放假","周日":"等着上课"}
#遍历字典的两种方法
for i in dic:
print(i,dic[i]) # i是遍历到的key dic[i]是对应的value
for k,v in dic.items(): #dic.items()
拿到的是[('周五', '等着放假')]
解包
print(k,v)
二.set集合
集合是无序的,不可重复的数据集合,集合里面的每个元素必须是可哈希的(不可变的数据类型),但是集合是不可哈希的,所以集合做不了字典的键
1.set集合的用处
用的最多的就是去重复
lst = ["麻将", "牌九", "骰子", "扑克", "骰子", "扑克", "扑克", "扑克", ]
print(list(set(lst)))
2.set集合的增删改查
增
s.add(元素) 直接添加 set是无序的
s.update() 迭代添加
s = {"刘嘉玲","赵本山","罗纳尔多","剑神"}
s.add("剑圣")
s.update("剑圣") #迭代添加
s.update(["剑圣"]
删
s.pop() 随机删除一个
s.remove(元素) 指定删除一个
s.pop() #因为set是无序的 ,所以随机删. ()里没有arg
s.remove("剑神") #指定删
改
只能先删除再添加
查
可迭代,用for循环