1.什麼是字典 字典是以key:value的形式來保存數據,用{}表示. 存儲的是key:value 坑: 字典存儲數據的時候是用的hash值來存儲. 演算法不能變(python的) # 數據必須是不可變的(可哈希). 字典的key必須是可哈希的(不可變). dic = {"jay":"周傑倫", " ...
1.什麼是字典 字典是以key:value的形式來保存數據,用{}表示. 存儲的是key:value 坑: 字典存儲數據的時候是用的hash值來存儲. 演算法不能變(python的) # 數據必須是不可變的(可哈希). 字典的key必須是可哈希的(不可變). dic = {"jay":"周傑倫", "jj": "林俊傑", "jolin":"蔡依林"} print(dic['jay']) # 周傑倫 dic['jay'] = "麻花藤" #字典的key是不變的,可以通過key來帶出value的信息 2.字典的增刪改查 1.增加,添加: dic[新key] = 元素 dic = {"義大利": "李雲龍", "美國": "美國往事"} dic["日本"] = "東京審判" # 新key表示添加 dic['南韓'] = "釜山行 dic["日本"] = "鬼片" setdefault()(難點) 有添加的功能,如果key是存在的,不添加, setdefault("","") dic = {"義大利": "李雲龍", "美國": "美國往事"} dic.setdefault("美國", "三傻大鬧寶萊塢") print(dic) 2.刪除 pop(key) 主要要記得,刪除key後,同value一起刪除掉 dic = {"張藝謀":"紅高粱", "李安":"斷臂山", "陳凱歌":"霸王別姬", "郭德綱":"祖宗十九代"} dic.pop("郭德綱") print(dic) #{'張藝謀': '紅高粱', '李安': '斷臂山', '陳凱歌': '霸王別姬'} popitem() 隨機刪除一項,在python早期的版本,字典是無序的 dic = {"張藝謀":"紅高粱", "李安":"斷臂山", "陳凱歌":"霸王別姬", "郭德綱":"祖宗十九代"} dic.popitem() # 隨機刪除一項. 在python早期版本 字典是無序的. print(dic) #{'張藝謀': '紅高粱', '李安': '斷臂山', '陳凱歌': '霸王別姬'} clear() 清空字典中的所有內容 del dic["key"] 跟pop的區別在於使用的語法:pop(key) dic = {"張藝謀":"紅高粱", "李安":"斷臂山", "陳凱歌":"霸王別姬", "郭德綱":"祖宗十九代"} del dic["李安"] print(dic) #{'張藝謀': '紅高粱', '陳凱歌': '霸王別姬', '郭德綱': '祖宗十九代'} 3.修改 dic[老key] = 值 dic = {"河南":"胡辣湯", "開封": "灌湯包", "武漢":"熱乾麵"} dic['河南'] = "燴面" # 老key = 值 print(dic) update() 更新字典 dic = {"id": 123, "name": 'sylar', "age": 18} dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"} dic.update(dic1) # 把dic1中的內容更新到dic中. 如果key重名. 則修改替換. 如果不存 在key, 則新增. print(dic) print(dic1) 4.查詢 dic[key] dic1 = {"趙四":"劉曉光", "劉能":"王曉利", "王木生":"範偉"} # 直接使用key就可以拿到value print(dic1["趙四四"]) # KeyError: '趙四四' key不存在 get(key,值) print(dic1.get("劉能能")) # None 當key不存在返回None print(dic1.get("劉能能", "沒有這個人")) # 當key不存在. 返回第二個參數. 預設第二個參數是None setdefault("key","value") 第一個功能是天加(當key不存在的時候). 第二個功能是查詢(根據你給的key查詢). 如果key不存在,先執行新增的操作,在使用key把對應的value查詢出來 3.字典的相關操作 1. keys() 獲取到所有的鍵 dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"} print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不⽤管它是什麼.當 成list來⽤就⾏ for key in dic.keys(): print(key) 2. values() 獲取到所有的值 dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"} for value in dic.values(): print(value) 3. items() 拿到所有的鍵值對 dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"}
print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), ('age', 18), ('ok', '科⽐')]) 這個東⻄也是list. 只不過list中裝的是tuple for key, value in dic.items(): # ?? 這個是解構 print(key, value) 4..字典的嵌套
wf = { "name":"汪峰", "age":52, "hobby":["唱歌", "上頭條", "穿皮褲"], "wife": { "name": "章子怡", "age": 49, "hobby":["演戲", "上電視", "當導師"], "tishen": { "name":"萌萌", "age":28 }, "zhuli":{ "name":"磊磊", "age": 20 } }, "zhuli":{ "name":"寶寶", "age":23, "hobby":["抽煙","喝酒","燙頭"] }, "children":[{"name":"汪老大"}, {"name":"汪老二"}] } wf['children'][1]["age"] = 2 #在children裡面新建字典{"age":"2"} print(wf) # print(wf['zhuli']['name']) #輸出名字 print(wf) # 汪峰老婆替身的名字 print(wf['wife']['tishen']['name']) # 汪峰老婆的第二個愛好 print(wf['wife']['hobby'][1]) # 汪峰助理的第三個愛好 print(wf['zhuli']['hobby'][2]) # 汪峰的助理+10歲 wf['zhuli']['age'] = wf['zhuli']['age'] + 10 # 汪峰的老婆添加一個愛好("導戲") wf['wife']['hobby'].append("導戲") # 添加完畢了 # 刪除汪峰助理的"抽煙"愛好 wf["zhuli"]["hobby"].remove("抽煙") print(wf)
5.集合(不重要).去重覆 唯一能用到的點,就是去重覆 s = {"周潤發", "大潤發", "王潤發", "周潤發"} # 不重覆的 print(s) #{'大潤發', '周潤發', '王潤發'} 集合和字典,是沒有索引和切片的 集合中的元素是不可重覆的.必須是可哈希的(不可變),字典中的key lst = ["麻將", "牌九", "骰子", "撲克", "骰子", "撲克", "撲克", "撲克"] # 把列表轉化成集合 x 轉化成y類型 y() s = set(lst) print(s) # 把集合變回列表 # lst = list(s) print(lst) # 順序是亂的 空集合:set() 空元組: tuple() 空列表: list() 非空集合:{123} 新增: add 添加 #需要記住的 s = {"劉嘉玲", "趙本山", "萊昂納多迪卡普里奧", "羅納爾多"} s.add("劉嘉玲") print(s) update 迭代更新 s.update({"劉嘉玲", "劉能", "趙四"}) # 迭代更新 print(s) 刪除: pop() 隨機彈一個,隨機刪除 ret = s.pop() # 隨機刪除一個 print(s) print(ret) remove() 指定刪除 s.remove("羅納爾多") print(s) 修改 : 只能先刪除在添加 s = {"劉嘉玲", "趙本山", "萊昂納多迪卡普里奧", "羅納爾多"} 把羅納爾多修改成梅西 s.remove("羅納爾多") s.add("梅西") print(s)
# 迭代 # for el in s: # print(el) # s1 = {"門神", "燈神", "燈神你在笑什麼?"} # s2 = {"門神", "燈神", "你倆在乾什麼?"} # 交集 # print(s1 & s2) # print(s1.intersection(s2)) # 並集 # print(s1 | s2) # print(s1.union(s2)) # # 差集 # print(s1 - s2) # s1中特有的內容 # print(s1.difference(s2)) # # # 反交集 # print(s1 ^ s2) # 兩個集合中特有的內容 # print(s1.symmetric_difference(s2)) # 集合本身是可變的數據類型 . 不可哈希 # 集合套集合->不能互相嵌套的 # 集合中的元素必須可哈希(不可變的) # s = {123} # 如果非要集合套集合 # s = frozenset({"哈哈","呵呵"}) # 不可變的數據類型(集合) # for el in s: # print(el)