python裡的字典和集合
一.字典
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迴圈