python學習篇05 - 字典 集合
阿新 • • 發佈:2018-12-02
1、字典
定義:字典是以 key :value 的形式來儲存資料,用{} 來表示,儲存的是 key : value
查詢效率比較高(注:字典儲存資料時,用的是hash值來儲存,演算法不能變(python)
資料必須是不可變的(可雜湊),字典的key必須是可雜湊的(不可變)
列表是可變的,不可雜湊
元組是不可變的,可雜湊的
2、字典的增刪改查
增加
dic[新key] = 值
dic.setdefault() 有新增的功能,如果key存在,不新增
流程:判斷新key是否在字典中存在,如果已經存在了,不做變更;如果不存在,執行新增操作
刪除
dic.pop(key)
dic.popitem() 隨機刪除一項,在python早期的版本中,字典是無序的。
del dic[key]
dic.clear() 清空
修改
dic[老key] = 值
update(dic1) # 把dic1中的內容更新到dic中,如果key重名,則修改替換,如果不存在key,則新增。
查詢
一般用key來查詢具體的資料。
1、直接使用key就可以拿到value。當key不存在時,報錯
2、dic.get(key) 當key 不存在返回 None
當key存在時,返回第二個引數,預設第二個引數為 None
3、 dic.setdefailt() 第一個功能是新增(當key不存在的時候) 第二個功能是查詢(根據你給的key)
整個執行流程:判斷給的key是否存在,如果存在,就不執行新增流程,直接查詢出這個key對應的value
如果key不存在,先執行新增操作,再使用key把對應的value查詢出來。
遍歷,字典是一個可迭代物件
a,b = 1,2 # 把後面的兩個值分別賦值給前面兩個變數,解構,解包
元組和列表是可以解包的
for k,v in dic.items():
print(item)
k,v = item #解構
k = item[0]
v = item[1]
print(k,v)
遍歷字典的兩套方案
1、使用for迴圈直接遍歷字典
字典的巢狀,字典套字典
5、 set 集合
set集合是python的一個基本資料型別。set中的元素是不重複的無序的,裡面的元素必須是可hash的(int,str,tuple,bool)
set 就是dic型別的資料但不儲存value,只儲存key set也用{}表示
注: set集合中的元素必須是可hash的,但set本身是不可hash的,set是可變的
使用set的不可重複的特性,我們可以使用set來去重
dic = {"趙四":"劉曉光", "劉能":"王曉利", "王木生":"範偉"} for key in dic: print(key) print(value)
2、可以使用字典的items() +解構可以直接獲取到key 和 value
for k,v in dic.items(): print(k) print(v)
3、字典的相關操作 dic.keys() 獲取到所有的鍵值 dic.values() 獲取到所有的值 dic.items() 獲取到所有的鍵值對 4、字典的巢狀
# 給 list 去重 lst =[45,6,''geg,45,6] lst = list(set(lst)) #把list轉化成set,再轉化回list print(lst)
6、set集合的增刪改查 1、增加 s.add('元素') # 重複的內容不會被新增到set集合中 s.update('元素') #迭代更新 2、刪除 item = s.pop() # 隨機彈出一個 s.remove('元素') # 若這個元素不存在,刪除在會報錯 s.clear() #清空set集合,清空完之後,會列印為 set(),要和dic區分 3、修改 set集合中的資料沒有索引,也沒辦法去定位一個元素,所以沒有辦法直接修改 我們可以採用先刪除後新增的方式來完成修改操作
s = {"劉嘉玲", '關之琳', "王祖賢","張曼⽟", "李若彤"} # 把劉嘉玲改成趙本⼭ s.remove("劉嘉玲") s.add("趙本⼭") print(s)
4、查詢 set 是一個可迭代的物件,所以可以進行for迴圈 7、set集合的一些其他操作 交集:s1&s2 s1.intersection(s2) 並集:s1|s2 s1.union(s2) 差集 :s1 -s2 s1.difference(s2) 得到s1 中單獨存在的元素 反交集(s1^s2) s1.symmetric_difference(s2) 兩個集合中單獨存在的元素 子集: s1 < s2 s1.issubset(s2) s1 是 s2 的子集嗎?返回 True or False 超集: s1 >s2 s1 是s2 的超集嗎? False or True set集合本身是可以發生改變的,是不可hash的。我們可以用frozenset來儲存資料。frozenset是不可變的,也就是一個可雜湊的資料型別
s = frozenset(["趙本⼭", "劉能", "⽪⻓⼭", "⻓跪"]) dic = {s:'123'} # 可以正常使⽤了 print(dic) #{frozenset({'劉能', '⽪⻓⼭', '趙本⼭', '⻓跪'}): '123'}