Dict就是一種key:value的表格:
>>> d = { 'Adam':95, 'Lisa':85, 'Bart':59, 'Paul':75 } >>> print (d) {'Paul': 75, 'Adam': 95, 'Bart': 59, 'Lisa': 85} >>> print (len(d)) 4
在這里的len()能夠用來計算Dict的長度
在Dict當中我們可以通過key來索引函數,只要key存在函數便會返回一個值:
>>> d = { 'Adam':95, 'Lisa':85, 'Bart':59, 'Paul':75 } >>> print (d['Addam']) Traceback (most recent call last): File "<pyshell#46>", line 1, in <module> print (d['Addam']) KeyError: 'Addam' >>> print (d['Adam']) 95
在上面如果你所輸入的key在Dict當中不存在系統便會報錯,在這個時候哦我們便有兩種方法:
一是先判斷一下 key 是否存在,用 in 操作符:
>>> d = { 'Adam':95, 'Lisa':85, 'Bart':59, 'Paul':75 } >>> if 'Adam' in d: print (d['Adam']) 95 >>> if 'Adaam' in d: print (d['Adaam']) >>>
二是使用dict本身提供的一個 get 方法,在Key不存在的時候,返回None:
>>> d = { 'Adam':95, 'Lisa':85, 'Bart':59, 'Paul':75 } >>> print (d.get('Adam')) 95 >>> print (d.get('Adaa')) None
dict的第一個特點是查找速度快,無論dict有10個元素還是10萬個元素,查找速度都一樣。而list的查找速度隨着元素增加而逐漸下降。
不過dict的查找速度快不是沒有代價的,dict的缺點是占用內存大,還會浪費很多內容,list正好相反,占用內存小,但是查找速度慢。
由於dict是按 key 查找,所以,在一個dict中,key不能重復。
dict的第二個特點就是存儲的key-value序對是沒有順序的!這和list不一樣:
>>> d = { 'Adam':95, 'Lisa':85, 'Bart':59, 'Paul':75 } >>> print (d) {'Paul': 75, 'Adam': 95, 'Bart': 59, 'Lisa': 85}
打印的順序不一定是我們創建時的順序,而且,不同的機器打印的順序都可能不同,這說明dict內部是無序的,不能用dict存儲有序的集合。
dict的第三個特點是作為 key 的元素必須不可變,Python的基本類型如字符串、整數、浮點數都是不可變的,都可以作為 key。但是list是可變的,就不能作為 key。
如果使用list作為key便會出現報錯的提醒:
>>> d {[1,2,]:95}
SyntaxError: invalid syntax
Dict還有一個更新的功能,在這里:
>>> d = { 'Adam':95, 'Lisa':85, 'Bart':59, 'Paul':75 } >>> d['Paul'] = 72 >>> print (d) {'Paul': 72, 'Adam': 95, 'Bart': 59, 'Lisa': 85} >>> d['Peter'] = 77 >>> print (d) {'Paul': 72, 'Adam': 95, 'Peter': 77, 'Bart': 59, 'Lisa': 85}
Dict也是一個被遍歷的列表:
>>> d = {'Adam':95} >>> for key in d: print (key) Adam
dict的作用是建立一組 key 和一組 value 的映射關系,dict的key是不能重復的。
set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重復,而且是無序的,這點和 dict 的 key很像。
>>> s = set(['A','B','C']) >>> print (s) {'C', 'A', 'B'} >>> s = set(['A'.'B','C','C',]) SyntaxError: invalid syntax >>> s = set(['A','B','C','C']) >>> print (s) {'C', 'A', 'B'}
s中的元素如果在建立的時候是重復的話,在使用的時候就會將重復的元素給去除。
由於set存儲的是無序集合,所以我們沒法通過索引來訪問。
但是我們可以使用in來判斷在set當中是否存在該元素。
>>> s = set(['A','B','C']) >>> 'A' in s True >>> 'D' in s False
set的內部結構和dict很像,唯一區別是不存儲value,因此,判斷一個元素是否在set中速度很快。
set存儲的元素和dict的key類似,必須是不變對象,因此,任何可變對象是不能放入set中的。
最后,set存儲的元素也是沒有順序的。
set的這些特點,可以應用在哪些地方呢?
星期一到星期日可以用字符串'MON', 'TUE', ... 'SUN'表示。
假設我們讓用戶輸入星期一至星期日的某天,如何判斷用戶的輸入是否是一個有效的星期呢?
如果使用if語句的話呢是十分繁瑣的。
>>> if x! = 'MON' and x! = 'TUE' and x! = 'WED'...and x! = 'SUN':
print 'input error'
else :
print 'input ok'
這樣的話呢是十分繁瑣的,這里我們如果使用set的話呢那便可以簡便一些。
>>> s = set(['MON','TUE','WED','TUR','FRI','SAT','SUN']) >>> if x in s: print ('input right') else: print ('input error')
由於 set 也是一個集合,所以,遍歷 set 和遍歷 list 類似,都可以通過 for 循環實現。
>>> s = set([('Adam',95),('Lisa',85),('Bart',95)]) >>> for k in s: print (k[0],":",k[1]) Lisa : 85 Adam : 95 Bart : 95
由於set是一種無序的集合所以我們擁有兩種更新的方式:
一是把新的元素添加到set中,二是把已有元素從set中刪除。
python在增加的時候需要使用那個add()函數,而在刪除函數的時候需要使用remove()函數
>>> s.add(('Ana',95)) >>> print (s) {('Lisa', 85), ('Ana', 95), ('Adam', 95), ('Bart', 95)} >>> s.remove(('Adam',95)) >>> print (s) {('Lisa', 85), ('Ana', 95), ('Bart', 95)}