python之Dict和set類型


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)}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM