1. 程式人生 > >python學習篇05 - 字典 集合

python學習篇05 - 字典 集合

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迴圈直接遍歷字典
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、字典的巢狀
          字典的巢狀,字典套字典   5、 set 集合           set集合是python的一個基本資料型別。set中的元素是不重複的無序的,裡面的元素必須是可hash的(int,str,tuple,bool)         set 就是dic型別的資料但不儲存value,只儲存key set也用{}表示           注: set集合中的元素必須是可hash的,但set本身是不可hash的,set是可變的         使用set的不可重複的特性,我們可以使用set來去重  
# 給 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'}