一.字典
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循环