Python 列表、元組、字典、集合 區別
阿新 • • 發佈:2019-02-09
字典是另一種可變容器模型,且可儲存任意型別物件。
字典的每個鍵值對()用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
鍵必須是唯一的,但值則不必。值可以取任何資料型別,但鍵必須是不可變的,如字串,數字或元組。
info = {
'stu1':"Xiao Ming",
'stu2':"Xiao Liang",
'stu3':"Xiao Hong",
'stu4':"Xiao Rui",
}
print (info)
#修改
info['stu2'] = "Xiao Hu"
#增加
info['stu5'] = "Xiao Fang"
#刪除
info.pop('stu2')
del info['stu1']
info.popitem() #隨機刪一個
print (info)
info.clear() #清空字典所有條目
#查詢
print ('stu2' in info) #判斷是否存在,存在則返回True,否則返回False
print (info['stu1']) #如果一個key不存在,就報錯,get不會,不存在只返回None
#dict.get(key, default=None)
#返回指定鍵的值,如果值不在字典中返回default值
#比較安全的查詢方法
print (info.get('stu6'))
#其他
print (info.values()) #列印所有的值(即除了key)
print (info.keys()) #列印所有的key
print (info.items()) #把字典轉化為列表
# dict.setdefault(key, default=None)
# 和get()類似, 但如果鍵不存在於字典中,將會新增鍵並將值設為default
info.setdefault ('class3',{'Xiao Rui', 15})
print (info)
info.setdefault ('class1',{'Xiao Hong', 16})
print (info)
#迴圈列印
for i in info:
print (i,info[i])
for k,v in info.items():
print (k, v)
#多級字典巢狀及操作
info = {
'class1':{
'stu1':["Xiao Ming",16]
},
'class2':{
'stu2':["Xiao Liang",17]
}
}
info['class1']['stu1'][1] = 18
print (info)
#dict.fromkeys(seq[, val]))
# 建立一個新字典,以序列 seq 中元素做字典的鍵,val 為字典所有鍵對應的初始值
eg:
print (dict.fromkeys([6,7,8],'test'))
c = dict.fromkeys([6,7,8],[1,{'name':'frui'}])
c[6][1]['name'] = 'sorui'
print (c)
#update方法
info = {
'stu1':"Xiao Ming",
'stu2':"Xiao Liang",
'stu3':"Xiao Hong",
'stu4':"Xiao Rui",
}
b = {
'stu1': "Xiao Dong",
1:3,
2:4
}
print (info)
info.update(b)
為什麼dict查詢速度這麼快?
因為dict的實現原理和查字典是一樣的。假設字典包含了1萬個漢字,我們要查某一個字,一個辦法是把字典從第一頁往後翻,直到找到我們想要的字為止,這種方法就是在list中查詢元素的方法,list越大,查詢越慢。
第二種方法是先在字典的索引表裡(比如部首表)查這個字對應的頁碼,然後直接翻到該頁,找到這個字。無論找哪個字,這種查詢速度都非常快,不會隨著字典大小的增加而變慢。dict就是第二種實現方式。
和list比較,dict有以下幾個特點:
無序
查詢和插入的速度極快,不會隨著key的增加而變慢;
需要佔用大量的記憶體,記憶體浪費多。
而list相反:
查詢和插入的時間隨著元素的增加而增加;
佔用空間小,浪費記憶體很少。
所以,dict是用空間來換取時間的一種方法。
dict可以用在需要高速查詢的很多地方,在Python程式碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變物件。這是因為dict根據key來計算value的儲存位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的演算法稱為雜湊演算法(Hash)。
要保證hash的正確性,作為key的物件就不能變。在Python中,字串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key:
字典的每個鍵值對()用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
鍵必須是唯一的,但值則不必。值可以取任何資料型別,但鍵必須是不可變的,如字串,數字或元組。
info = {
'stu1':"Xiao Ming",
'stu2':"Xiao Liang",
'stu3':"Xiao Hong",
'stu4':"Xiao Rui",
}
print (info)
#修改
info['stu2'] = "Xiao Hu"
#增加
info['stu5'] = "Xiao Fang"
#刪除
info.pop('stu2')
del info['stu1']
info.popitem() #隨機刪一個
print (info)
info.clear() #清空字典所有條目
#查詢
print ('stu2' in info) #判斷是否存在,存在則返回True,否則返回False
print (info['stu1']) #如果一個key不存在,就報錯,get不會,不存在只返回None
#dict.get(key, default=None)
#返回指定鍵的值,如果值不在字典中返回default值
#比較安全的查詢方法
print (info.get('stu6'))
#其他
print (info.values()) #列印所有的值(即除了key)
print (info.keys()) #列印所有的key
print (info.items()) #把字典轉化為列表
# dict.setdefault(key, default=None)
# 和get()類似, 但如果鍵不存在於字典中,將會新增鍵並將值設為default
info.setdefault ('class3',{'Xiao Rui', 15})
print (info)
info.setdefault ('class1',{'Xiao Hong', 16})
print (info)
#迴圈列印
for i in info:
print (i,info[i])
for k,v in info.items():
print (k, v)
#多級字典巢狀及操作
info = {
'class1':{
'stu1':["Xiao Ming",16]
},
'class2':{
'stu2':["Xiao Liang",17]
}
}
info['class1']['stu1'][1] = 18
print (info)
#dict.fromkeys(seq[, val]))
# 建立一個新字典,以序列 seq 中元素做字典的鍵,val 為字典所有鍵對應的初始值
eg:
print (dict.fromkeys([6,7,8],'test'))
c = dict.fromkeys([6,7,8],[1,{'name':'frui'}])
c[6][1]['name'] = 'sorui'
print (c)
#update方法
info = {
'stu1':"Xiao Ming",
'stu2':"Xiao Liang",
'stu3':"Xiao Hong",
'stu4':"Xiao Rui",
}
b = {
'stu1': "Xiao Dong",
1:3,
2:4
}
print (info)
info.update(b)
為什麼dict查詢速度這麼快?
因為dict的實現原理和查字典是一樣的。假設字典包含了1萬個漢字,我們要查某一個字,一個辦法是把字典從第一頁往後翻,直到找到我們想要的字為止,這種方法就是在list中查詢元素的方法,list越大,查詢越慢。
第二種方法是先在字典的索引表裡(比如部首表)查這個字對應的頁碼,然後直接翻到該頁,找到這個字。無論找哪個字,這種查詢速度都非常快,不會隨著字典大小的增加而變慢。dict就是第二種實現方式。
和list比較,dict有以下幾個特點:
無序
查詢和插入的速度極快,不會隨著key的增加而變慢;
需要佔用大量的記憶體,記憶體浪費多。
而list相反:
查詢和插入的時間隨著元素的增加而增加;
佔用空間小,浪費記憶體很少。
所以,dict是用空間來換取時間的一種方法。
dict可以用在需要高速查詢的很多地方,在Python程式碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變物件。這是因為dict根據key來計算value的儲存位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的演算法稱為雜湊演算法(Hash)。
要保證hash的正確性,作為key的物件就不能變。在Python中,字串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key: