python中的集合dict&set
- dict型別
我們已經知道,list 和 tuple 可以用來表示順序集合,例如,班裡同學的名字以及他們對應的分數:
['mike','aki','jack']#姓名
[98,86,78]#對應的分數
但是如果要想通過名字找到對應的分數,使用list就不一定方便。
如果利用dict就能方便許多,在dict中名字作為key,分數作為value,dict可以通過key查詢對應的value。
d = {
'mike': 98,
'aki': 86,
'jack': 78
}
使用花括號 {} 表示這是一個dict,然後按照 key: value, 寫出來即可。最後一個 key: value 的逗號可以省略。
由於d{}是一個集合,可以用len()計算該集合的長度。
len(d)
訪問dict
dict可以使用key查詢對應的value,形如d[key]。這和list有點區別,list通過索引返回對應的value。
d['aki']
有點時候輸入的key可能不在集合中,那麼可以先判斷集合中是否含有所選擇的key。
if 'lee' in d
print d[lee]
另一種方法判斷key是否在集合中的命令,d.get()。
print d.get('naren')
如果所輸入的key不在其中,那麼print結果為None。
dict特點一:查詢速度快
dict的查詢速度特別快,10個數據和1萬個資料的查詢速度都一樣。相比list,隨著資料的增多,list速度回逐漸變慢。
不過,查詢速度並不是全部,dict很佔用空間,相反list佔用空間很小。
list是按照key查詢value的,所以在list中key不能重複。
dict特點二:內部具有無序性
也就是說,dict中儲存的key-value序對沒有排列順序,因此不能用dict儲存有序的序對。
dict特點三:key具有不可變性
python中字串、整數、浮點數、tuple都是不可變的,都可以作為 key。但是list是可變的,就不能作為 key。
不過value是可變的,value可以用list。
('a','b'):[1,2,3]
123 : 'a'
更新dict
dict是可變的,也就是說,我們可以隨時往dict中新增新的 key-value。比如已有dict:
d = {
'mike': 98,
'aki': 86,
'jack': 78
}
d['blue']=70
如果賦值的key已經存在,那麼可以替換相應的value。如:
d['mike']=80
遍歷dict
由於dict也是一個集合,所以,遍歷dict和遍歷list類似,都可以通過 for 迴圈實現。
可以直接用for迴圈遍歷dict的key。
d = {
'mike': 98,
'aki': 86,
'jack': 78
}
for key in d:
print key
由於通過 key 可以獲取對應的 value,因此,在迴圈體內,可以獲取到value的值。如:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
for key in d:
print key + ':', d[key]
2.
set型別
dict的作用是建立一組 key 和一組 value 的對映關係,dict的key是不能重複的。
有的時候,我們只想要 dict 的 key,不關心 key 對應的 value,目的就是保證這個集合的元素不會重複,這時,set()更適合。
set內含有一系列元素,set中元素無重複、無序且具有不變性,這點和dict中的key很想像。
建立一個set,需要用list作為元素。
s = set(['A', 'B', 'C'])
例:請用set表示班裡的4位同學:
Adam, Lisa, Bart, Paul
s = set([Adam, Lisa, Bart, Paul])
訪問set
已經學過的list通過索引訪問元素,dict通過其中的key訪問,訪問set一般用來判斷某元素是否在set中,而且由於set是無序集合,所以無法用索引,且set中的元素是list,也無法用key。
因此,我們可以用in來判斷元素是否在set中。
s = set([Adam, Lisa, Bart, Paul])
'Bill' in s #False
'Adam' in s #True
'adam' in s #False
由上還可得出,set不能識別大小寫。
例:假設我們讓使用者輸入星期一至星期日的某天,如何判斷使用者的輸入是否是一個有效的星期呢
weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])
x = '???' # 使用者輸入的字串
if x in weekdays:
print 'input ok'
else:
print 'input error'
遍歷set
由於 set 也是一個集合,所以,遍歷 set 和遍歷 list 、dict類似,都可以通過 for 迴圈實現。
例:請用 for 迴圈遍歷如下的set,打印出 name: score 來。
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
for x in s:
print x[0]+':',x[1]
更新set
由於set儲存的是一組不重複的無序元素,因此,更新set主要做兩件事:
一是把新的元素新增到set中,二是把已有元素從set中刪除。
新增元素時,用set的add()方法,如果新增的元素已經存在於set中,add()不會報錯,但是不會加進去了。
s = set([1,2,3])
s.add(4)
print s
刪除set中的元素時,用set的remove()方法,如果刪除的元素不存在set中,remove()會報錯。
s = set([1,2,3,4])
s.remove(4)
print s
由於remove()用時可能會報錯,用remove前需要判斷。add可直接使用。
例:針對下面的set,給定一個list,對list中的每一個元素,如果在set中,就將其刪除,如果不在set中,就新增進去。
s = set([‘Adam’, ‘Lisa’, ‘Paul’])
L = [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
s = set(['Adam', 'Lisa', 'Paul'])
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for name in L:
if name in s:
s.remove(name)
else:
s.add(name)
print s
總結:
dict&set
1.作為python中的集合,有:
dict{
key1 : value1,
key2 : value2,
…
}
set(list)
2.dict中的key與set中的元素都具有的三個特點:
無序性、無重複性和不變性。
3.集合的訪問、遍歷和更新
dict訪問 通過key; set訪問,用in做判斷
dict set 遍歷 通過for迴圈
dict更新 :新增、替換 ;set更新:新增(add)、刪除(remove)