dict
python內(nèi)置了字典:dict糟趾,使用鍵-值(key-value)存儲(chǔ)慌植。具有極快的查找速度甚牲。
用Python寫一個(gè)dict如下:
>>> d = {"Michael": 95, "Bob": 75, "Trancy": 85}
>>> d["Michael"]
95
把數(shù)據(jù)放入dict的方法义郑,除了初始化時(shí)指定外,還可以通過key放入:
>>> d["Adam"] = 67
>>> d["Adam"]
67
由于一個(gè)key只能對(duì)應(yīng)一個(gè)value丈钙,所以非驮,多次對(duì)一個(gè)key放入value,后面的至?xí)亚懊娴闹禌_掉:
>>> d["Jack"] = 90
>>> d["Jack"]
90
>>> d["Jack"] = 88
>>> d["Jack"]
88
如果key不存在雏赦,dict就會(huì)報(bào)錯(cuò)
要避免key不存在劫笙,有兩種方法,一是通過in 判斷:
>>> "Thomas" in d
False
二是通過dict提供的get()方法星岗,如果key不存在填大,可以返回None。
注意:返回None的時(shí)候Python的交互環(huán)境不顯示結(jié)果俏橘。
要?jiǎng)h除一個(gè)key允华, 用pop(key)方法,對(duì)應(yīng)的value也會(huì)從dict中刪除:
>>> d.pop("Bob")
75
>>> d
{"Michael":96, "Trancy": 85}
注意:dict內(nèi)部存放的順序可key放入的順序是沒有關(guān)系的寥掐。
- 和list比較靴寂,dict有以下幾個(gè)特點(diǎn):
1.查找和插入的速度極快,不會(huì)隨著key的增加而變慢召耘。
2.需要占用大量?jī)?nèi)存百炬,內(nèi)存浪費(fèi)多。- 而list相反:
1.查找個(gè)插入的時(shí)間隨著元素的增加而增加污它;
2.占用空間小剖踊,浪費(fèi)內(nèi)存很少。
所以轨蛤,dict是用空間換時(shí)間的一種方法蜜宪。
正確使用dict非常重要,需要牢記的第一條就是dict的可以必須是不可變對(duì)象祥山。
set
set和dict類似圃验,也是一組key的集合,但不存儲(chǔ)value缝呕。由于不能重復(fù)澳窑,所以,set里供常,沒有重復(fù)的key摊聋。
要?jiǎng)?chuàng)建一個(gè)set,需要提供一個(gè)list作為輸入集合:
>>> s = set([1,2,3])
>>> s
{1,2,3}
注意栈暇,傳入的參數(shù)[1,2,3]是一個(gè)list麻裁,而顯示的{1,2,3}只說明set內(nèi)部有1,2,3這3個(gè)元素,顯示的順序也不表示set是有序的。
重復(fù)元素在set中自動(dòng)被過濾:
>>> s = set([1,1,1,2,2,3,3])
>>> s
{1,2,3}
通過add(key)方法可以添加元素到set中煎源,可以重復(fù)添加色迂,但不會(huì)有效。
通過remove(key)方法可以刪除元素手销。
set可以看成數(shù)學(xué)上的無序和無重復(fù)元素的集合歇僧,因此,兩個(gè)set可以做數(shù)學(xué)意義上的交集锋拖,并集等操作:
>>> s1 = set([1,2,3])
>>> s2 = ste([2,3,4])
>>> s1 & s2
{2,3}
>>> s1 | s2
{1,2,3,4}
不可變對(duì)象诈悍,str,對(duì)str進(jìn)行操作:
>>> a = "abc"
>>> a.replace('a','A')
'Abc'
>>> a
'abc'
>>> a = 'abc'
>>> b = a.replace('a','A')
>>> b
'Abc'
>>> a
'abc'