基本數據類型(dict)

基本數據類型(dict)字典(鍵值對)

​ 字典(dict)是python中惟⼀的⼀個映射類型.他是以{ }括起來的鍵值對組成. 在dict中key是 惟⼀的. 在保存的時候, 根據key來計算出⼀個內存地址. 而後將key-value保存在這個地址中. 這種算法被稱爲hash算法, 因此, 切記, 在dict中存儲的key-value中的key'必須是可 的, 若是你搞不懂什麼是可哈希, 暫時能夠這樣記, 能夠改變的都是不可哈希的, 那麼可哈希就意味着不可變. 這個是爲了能準確的計算內存地址⽽規定的.python

  • 格式: dict = {key1: value1, key2: value2....}
  • 已知的可哈希(不可變)的數據類型: int, str, tuple, bool
  • 不可哈希(可變)的數據類型: list, dict, set

字典的特性 :git

  • 查詢的效率很是高, 經過key來查找元素
  • 字典比較消耗內存 最長用的數據: 字符串 列表 字典
  • 字典可以將數據進行關聯
  • dict保存的數據不是按照咱們添加進去的順序保存的. 是按照hash表的順序保存的. ⽽hash表 不是連續的. 因此不能進⾏切片⼯做. 它只能經過key來獲取dict中的數據

字典的增刪查改

增長

setdefault(設置默認值) dic.setdefault(key,value) 格式用逗號隔開

直接用key添加

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}

刪除

pop 彈 指定key 刪除

  • dit.pop(key)

popitem 隨機刪除

  • dit.popitem() 3.5版本之後默認刪除最後一個

del 指定刪除

  • del dit[key] 字典沒有索引 只能根據key去刪除

clear 清空

  • dit.clear() 清空字典

修改

利用key去修改

update 更新 (用新的dict去跟新)

第一種 :利用key去修改:
dic = {"劉能": "王小利", "趙四": "劉曉光", "王木生": "範偉", "謝大腳": "於月仙"}
dic['王木生'] = "劉偉" 
print(dic)
# 結果: {"劉能": "王小利", "趙四": "劉曉光", "王木生": "劉偉", "謝大腳": "於月仙"}

第二種 :  update  更新
dic = {"劉能": "王小利", "趙四": "劉曉光", "王木生": "範偉", "謝大腳": "於月仙"}
dic2 = {"劉能": "大陽哥", "趙四": "github", "王木生": "汪峯","王大拿": "金老闆"}
dic.update(dic2)
print(dic)
#結果 :{"劉能": "大陽哥", "趙四": "github", "王木生": "汪峯", "謝大腳": "於月仙","王大拿": "金老闆"}     # 舊的覆蓋,沒改的不動,新加的補到最後

查詢

直接用key

  • print(dic[key]) 若是key不存在會報錯

get 方法 dic.get(key,xx)key不存在,會顯示xx

  • print(dic.get(key))
若是key("sylar")不存在
第一個  print(dic.get("sylar")) # None  系統默認會顯示None
print(dic.get("sylar", "⽜B"))  # ⽜B   若是key不存在,第二個逗號會顯示出 "⽜B"

setdefault() 新增後查詢

  • 新增(先看有沒有key, 若是有就過, 若是沒有,執行新增)
  • 根據key把值返回,值也是新增也行是舊的
  • 第一步 : 執行新增流程. 第二步 : 查詢結果
dic = {}
dic["蓋倫"] = "德瑪西亞之力"
value = dic.setdefault("菲奧娜", "無雙劍姬")  # 新增
value2 = dic.setdefault("蓋倫", "劉偉")  # 因爲已經存在了key。 因此新增不執行。 直接查詢結果
value3 = dic.setdefault("薇恩", "坑")

print(value3)  結果 : "坑"
print(dic)
結果 : {"蓋倫":"德瑪西亞之力","菲奧娜":"無雙劍姬","薇恩": "坑"}

其餘相關操做

字典的遍歷方式

  • dic遍歷時,keys至關因而字典的索引,values能夠當作keys對應的元素
#  對字典的遍歷 :
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)

enumerate 枚舉 (,默認從0開始計) (相似range)

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"}
  • keys() 獲取全部鍵 這個返回的不是列表, 很像列表
  • values()獲取全部的值
  • items() 獲取全部的鍵值對. 返回的是元組

解構

  • 解構, 直接把元組或者列表中的數據拿出來.
  • dict解包出來是 key
# 解構
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"))
相關文章
相關標籤/搜索