字典(dict)是python中惟⼀的⼀個映射類型.他是以{ }括起來的鍵值對組成. 在dict中key是 惟⼀的. 在保存的時候, 根據key來計算出⼀個內存地址. 而後將key-value保存在這個地址中. 這種算法被稱爲hash算法, 因此, 切記, 在dict中存儲的key-value中的key'必須是可 的, 若是你搞不懂什麼是可哈希, 暫時能夠這樣記, 能夠改變的都是不可哈希的, 那麼可哈希就意味着不可變. 這個是爲了能準確的計算內存地址⽽規定的.python
字典的特性 :git
dic = {} dic['name'] = '周潤發' # 若是dict中沒有出現這個key, 就會新增⼀個key-value的組合進dict dic['age'] = 18 print(dic) # 若是dict中沒有出現過這個key-value. 能夠經過setdefault設置默認值 dic.setdefault('李嘉誠') # 也能夠往⾥⾯設置值. print(dit) # 打印出來是 {'李嘉誠':None} dic.setdefault("李嘉誠", "房地產") # 若是dict中已經存在了. 那麼setdefault將不會起做⽤ print(dic) #這時出現的是依舊是 {'李嘉誠':None}
第一種 :利用key去修改: dic = {"劉能": "王小利", "趙四": "劉曉光", "王木生": "範偉", "謝大腳": "於月仙"} dic['王木生'] = "劉偉" print(dic) # 結果: {"劉能": "王小利", "趙四": "劉曉光", "王木生": "劉偉", "謝大腳": "於月仙"} 第二種 : update 更新 dic = {"劉能": "王小利", "趙四": "劉曉光", "王木生": "範偉", "謝大腳": "於月仙"} dic2 = {"劉能": "大陽哥", "趙四": "github", "王木生": "汪峯","王大拿": "金老闆"} dic.update(dic2) print(dic) #結果 :{"劉能": "大陽哥", "趙四": "github", "王木生": "汪峯", "謝大腳": "於月仙","王大拿": "金老闆"} # 舊的覆蓋,沒改的不動,新加的補到最後
若是key("sylar")不存在 第一個 print(dic.get("sylar")) # None 系統默認會顯示None print(dic.get("sylar", "⽜B")) # ⽜B 若是key不存在,第二個逗號會顯示出 "⽜B"
dic = {} dic["蓋倫"] = "德瑪西亞之力" value = dic.setdefault("菲奧娜", "無雙劍姬") # 新增 value2 = dic.setdefault("蓋倫", "劉偉") # 因爲已經存在了key。 因此新增不執行。 直接查詢結果 value3 = dic.setdefault("薇恩", "坑") print(value3) 結果 : "坑" print(dic) 結果 : {"蓋倫":"德瑪西亞之力","菲奧娜":"無雙劍姬","薇恩": "坑"}
# 對字典的遍歷 : dic = {"汪峯": "大陸音樂半壁江山", "周杰倫": "亞洲音樂天王", "羅志祥": "亞洲舞王"} 第一種: # print(dic.keys()) # dict_keys(['汪峯', '周杰倫', '羅志祥']) 像列表但不是列表 for key in dic.keys(): print(key) # 拿到key print(dic[key]) # 拿到value
第二種(最簡化): # print(dic.items()) # 拿到的是key和value for k, v in dic.items(): # 當須要遍歷字典. 在操做中涉及到key和value的時候. print(k) # 元組的keys print(v) # 元組的與keys對應的values
第三種(經常使用): 字典自己是一個可迭代對象,能夠直接進行for循環 for el in dic: # 直接拿到key print(el) # keys print(dic[el]) # values
打印元組: for item in dic.items(): print(item) # 打印出的結果是 dic裏每個(key:value)
dic = {1:11,2:22,3:33,4:44,5:55,6:66,7:77,8:88,} for i in enumerate(dic,1): # 也能夠是dic.values / items print(i) # 打印結果 (默認顯示的是keys) (1, 1) (2, 2) (3, 3) (4, 4) (5, 5) (6, 6) (7, 7) (8, 8)
解包和枚舉 s = "wtf" d = {} for i, d[i] in enumerate(s): pass print(d)# 打印結果: {0:"w",1:"t",2:"f"}
# 解構 a, b = 1, 2 print(a, b) (c, d) = 3, 4 print(c, d) e, f = [1, 2, 3] # 解構的時候注意數量必須匹配 print(e, f)
與list類似,索引換成keygithub
# 字典的嵌套 dic1 = { "name": "汪峯", "age": 18, "wife": { "name": '章⼦怡', "age": 28 }, "children": ['第⼀個⽑孩⼦', '第⼆個⽑孩⼦'], "desc": '峯哥不會告我吧. 不要緊. 我想上頭條的' } print(dic1.get("wife").get("name"))