課時25:字典:當索引不好用時

那是個好男孩發表於2018-08-16

目錄:

  一 、字典(雜湊、關係陣列)

  二、建立和訪問字典

  三、課時25課後習題及答案

 

*********************************

一 、字典(雜湊、關係陣列)

*********************************

在Python中也有字典,又稱為雜湊(hash),有些地方稱為關係陣列。

字典是Python中唯一的對映型別,對映是數學上的一個術語,指的是兩個元素集合之間元素相互“對應”關係,如下圖所示:

 

對映型別區別於序列型別,序列型別一陣列的形式儲存,通過索引的方式來獲取相應位置的值,一般索引值與對應位置儲存的資料是毫無關係的。舉個例子:

>>> brand = ["李寧","耐克","阿迪達斯","魚C工作室"]
>>> slogan = ["一切皆有可能","Just do it","Impossible is nothing","讓程式設計改變世界"]
>>> print("魚C工作號的口號是:",slogan[brand.index("魚C工作室")])
魚C工作號的口號是: 讓程式設計改變世界

列表brand和slogan的索引和相對的值是沒有任何關係的,可以看出,唯一有關係的就是兩個列表之間,索引號相同的元素是有關係的(品牌對應口號嘛),所以這裡通過“brand.index("魚C工作室")”這樣的語句,間接地實現通過品牌查詢對應口號的功能。這種方式有點差強人意,所以,需要有字典這種對映型別的出現。

 

***********************

二、建立和訪問字典

***********************

 先演示下用法:

>>> dict1 = {"李寧":"一切皆有可能","耐克":"Just do it","阿迪達斯":"Impossible is nothing","魚C工作室":"讓程式設計改變世界"}
>>> dict1
{'李寧': '一切皆有可能', '耐克': 'Just do it', '阿迪達斯': 'Impossible is nothing', '魚C工作室': '讓程式設計改變世界'}
>>> print("魚C工作號的口號是:",dict1['魚C工作室'])
魚C工作號的口號是: 讓程式設計改變世界

字典的使用非常簡單,它有自己的標誌性符號,就是用大括號( { } )定義。字典由多個鍵及其對應的值共同構成,每一對鍵值組合稱為項。在剛才的例子中,“李寧”“耐克”“阿迪達斯“”魚C工作室”這些品牌就是鍵,而"一切皆有可能","Just do it","Impossible is nothing","讓程式設計改變世界"這些口號就是對應的值。也許細心的你發現了:字典中的項跟建立的順序不一樣的?沒錯,字典跟序列不同,序列講究順序,字典講究對映,不講順序。

另外,需要注意的是:字典的鍵必須是獨一無二的,而值可以取任何資料型別,但必須是不可變的(如字串、數或元組)。

要申明一個空字典,直接用大括號即可:

 

>>> empty = {}
>>> empty
{}
>>> type(empty)
<class 'dict'>

 

你也可以用dict()來建立字典:

>>> dict1 = dict((('F',70),('i',105),('s',115),('h',104),('c',67)))
>>> dict1
{'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67}

為什麼會有這麼多的括號呢?

因為dict()函式的引數可以是一個序列(但不能是多個),所以要打包成一個元組序列(列表也可以)。當然,如果嫌上面的做法太麻煩,還可以通過提供具有對映關係的引數來建立字典:

>>> dict1 = dict(F=70,i=105,s=115,h=104,c=67)
>>> dict1
{'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67}

這裡要注意的是鍵的位置不能加上字串的引號,否則會報錯:

>>> dict1 = dict('F'=70,'i'=105,'s'=115,'h'=104,'c'=67)
SyntaxError: keyword can't be an expression

還有一種建立的方法是直接給字典賦值,如果鍵存在,則改寫鍵對應的值;如果不存在,則建立一個新的鍵並賦值:

>>> dict1
{'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67}
>>> dict1['x'] = 88
>>> dict1
{'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67, 'x': 88}
>>> dict1['x'] = 120
>>> dict1
{'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67, 'x': 120}

正所謂殊途同歸,下面列舉的五種方法都是建立同樣的字典,我們好好的體會下:

>>> a = dict(one = 1,two = 2,three = 3)
>>> b = {'one':1,'two':2,'three':3}
>>> c = dict(zip(['one','two','three'],[1,2,3]))
>>> d = dict([('two',2),('one',1),('three',3)])
>>> e = dict({'three':3,'one':1,'two':2})
>>> a == b == c == d == e
True
>>> a
{'one': 1, 'two': 2, 'three': 3}
>>> b
{'one': 1, 'two': 2, 'three': 3}
>>> c
{'one': 1, 'two': 2, 'three': 3}
>>> d
{'two': 2, 'one': 1, 'three': 3}
>>> e
{'three': 3, 'one': 1, 'two': 2}

 

 

*******************************

三、課時25課後習題及答案

*******************************

相關文章