1. 程式人生 > >python之Dict和set型別

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

複製程式碼