dict
Python內(nèi)置了字典:dict的支持诀诊,dict全稱dictionary掀泳,在其他語言中也稱為map月幌,使用鍵-值(key-value)存儲碍讯,具有極快的查找速度。
假設(shè)要根據(jù)同學的名字查找對應(yīng)的成績扯躺,如果用list實現(xiàn)捉兴,需要兩個list:
names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]
使用 dict 實現(xiàn)
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
d['Michael']
95
將數(shù)據(jù)放進dict的方法,除了初始化時指定外录语,還可以通過key放入:
d['Adam'] = 67
d['Adam'] ==> 67
訪問不存在的key轴术,會報錯
要避免key不存在,有兩種方法:
- (1) 通過in判斷key是否存在
'Thomas' in d
- (2) 通過dict提供的get()方法钦无,如果key不存在,可以返回None盖袭,或者自己指定的value
d.get('Thomas')
d.get('Thomas', -1) => -1
返回None的時候Python的交互環(huán)境不顯示結(jié)果失暂。
刪除一個key和對應(yīng)的value:
d.pop('Bob')
在Python中彼宠,字符串、整數(shù)等都是不可變的弟塞,因此凭峡,可以放心地作為key。而list是可變的决记,就不能作為key:
set
set和dict類似摧冀,也是一組key的集合,但不存儲value系宫。由于key不能重復(fù)索昂,所以,在set中扩借,沒有重復(fù)的key椒惨。
要創(chuàng)建一個set,需要提供一個list作為輸入集合:
s = set([1,2,3]) ==> {1, 2, 3}
重復(fù)元素在set中自動被過濾
s = set([1,2,3,1,2,3]) ==> {1, 2, 3}
添加元素到set中:
s.add(4)
刪除元素:
s.remove(4)
set可以看成數(shù)學意義上的無序和無重復(fù)元素的集合潮罪,因此康谆,兩個set可以做數(shù)學意義上的交集、并集等操作:
s1 = set([1, 2, 3])
s2 = set([2, 3, 4])
s1 & s2
{2, 3}
s1 | s2
{1, 2, 3, 4}
set和dict的唯一區(qū)別僅在于沒有存儲對應(yīng)的value嫉到,但是沃暗,set的原理和dict一樣,所以何恶,同樣不可以放入可變對象孽锥,因為無法判斷兩個可變對象是否相等,也就無法保證set內(nèi)部“不會有重復(fù)元素”导而。試試把list放入set忱叭,看看是否會報錯。
a = 'abc'
b = a.replace('a', 'A')
b
'Abc'
a
'abc'
對于不變對象來說今艺,調(diào)用對象自身的任意方法韵丑,也不會改變該對象自身的內(nèi)容。相反虚缎,這些方法會創(chuàng)建新的對象并返回撵彻,這樣,就保證了不可變對象本身永遠是不可變的