MozZhang 2018-09-18 16:25:04 昨晚,一邊看男籃比賽,一邊把第六章學(xué)完了,哈哈哈。。。 直接進(jìn)入正題,在本章中, 將學(xué)習(xí)能夠?qū)⑾嚓P(guān)信息關(guān)聯(lián)起來的Python字典。學(xué)習(xí)如何訪問和修改字典中的信息。 鑒于字典可存儲的信息量幾乎不受限制,因此我們會演示如何遍歷字典中的數(shù)據(jù)。另外,還將學(xué)習(xí)存儲字典的列表、 存儲列表的字典和存儲字典的字典。由于貼代碼塊時,沒有縮進(jìn),所以我選擇貼代碼的圖,這樣能夠清晰看到縮進(jìn),畢竟python嚴(yán)格縮進(jìn)?。。?! 6.1 一個簡單的字典來看一個游戲, 其中包含一些外星人, 這些外星人的顏色和點(diǎn)數(shù)各不相同。 下面是一個簡單的字典, 存儲了有關(guān)特定外星人的信息: alien_0 = {'color' : 'green', 'points' : 5} 字典alien_0 存儲了外星人的顏色和點(diǎn)數(shù)。 使用兩條print 語句來訪問并打印這些信息, 如下所示: 6.2 使用字典在Python中, 字典是一系列鍵(key)—值(value)對 。 每個鍵都與一個值相關(guān)聯(lián), 可以使用鍵來訪問與之相關(guān)聯(lián)的值。 與鍵相關(guān)聯(lián)的值可以是數(shù)字、 字符串、 列表乃至字典。 事實(shí)上, 可將任何Python對象用作字典中的值。在Python中,字典用放在花括號{} 中的一系列鍵—值對表示。鍵—值 對是兩個相關(guān)聯(lián)的值。指定鍵時,Python將返回與之相關(guān)聯(lián)的值。 鍵和值之間用冒號分隔, 而鍵—值對之間用逗號分隔。 在字典中, 你想存儲多少個鍵—值對都可以。 6.2.1 訪問字典中的值要獲取與鍵相關(guān)聯(lián)的值, 可依次指定字典名和放在方括號內(nèi)的鍵。 alien_0 = {'color' : 'green','points' : 5} 6.2.2 添加鍵—值對字典是一種動態(tài)結(jié)構(gòu),可隨時在其中添加鍵—值對。 要添加鍵—值對, 可依次指定字典名、 用方括號括起的鍵和相關(guān)聯(lián)的值。 alien_0 = {'color':'green', 'points':5}
6.2.3 先創(chuàng)建一個空字典使用字典來存儲用戶提供的數(shù)據(jù)或在編寫能自動生成大量鍵—值對的代碼時, 通常都需要先定義一個空字典。 alien_0 = {} 6.2.4 修改字典中的值要修改字典中的值, 可依次指定字典名、 用方括號括起的鍵以及與該鍵相關(guān)聯(lián)的新值。我們首先定義了一個表示外星人alien_0 的字典, 其中只包含這個外星人的顏色。 接下來, 我們將與鍵'color' 相關(guān)聯(lián)的值改為'yellow' 。 alien_0 = {'color':'green'} 來看一個更有趣的例子: 對一個能夠以不同速度移動的外星人的位置進(jìn)行跟蹤。 為此, 我們將存儲該外星人的當(dāng)前速度, 并據(jù)此確定該外星人將向右移動多遠(yuǎn): 6.2.5 刪除鍵—值對對于字典中不再需要的信息, 可使用del 語句將相應(yīng)的鍵—值對徹底刪除。 使用del 語句時, 必須指定字典名和要刪除的鍵。刪除的鍵—值對將永遠(yuǎn)消失。 alien_0 = {'color':'green','points':5} 6.2.6 由類似對象組成的字典確定需要使用多行來定義字典時, 在輸入左花括號后按回車鍵, 再在下一行縮進(jìn)四個空格, 指定第一個鍵—值對, 并在它后面加上一個逗號。 此后你再次按回車鍵時, 文本編輯器將自動縮進(jìn)后續(xù)鍵—值對, 且縮進(jìn)量與第一個鍵—值對相同。在最后一個鍵—值對的下一行添加一個右花括號, 并縮進(jìn)四個空格, 使其與字典中的鍵對齊。 另外一種不錯的做法是在最后一個鍵—值對后面也加上逗號, 為以后在下一行添加鍵—值對做好準(zhǔn)備。
動手試一試6-1 人 : 使用一個字典來存儲一個熟人的信息, 包括名、 姓、 年齡和居住的城市。 該字典應(yīng)包含鍵first_name 、 last_name 、 age 和city 。 將存儲在該字典中的每項信息都打印出來。 6-2 喜歡的數(shù)字: 使用一個字典來存儲一些人喜歡的數(shù)字。 請想出5個人的名字, 并將這些名字用作字典中的鍵; 想出每個人喜歡的一個數(shù)字, 并將這些數(shù)字作為值存儲在字典中。 打印每個人的名字和喜歡的數(shù)字。 為讓這個程序更有趣, 通過詢問朋友確保數(shù)據(jù)是真實(shí)的。 ![]() 6.3 遍歷字典6.3.1 遍歷所有的鍵—值對要編寫用于遍歷字典的for 循環(huán), 可聲明兩個變量, 用于存儲鍵—值對中的鍵和值。 對于這兩個變量, 可使用任何名稱。for 語句的第二部分包含字典名和方法items() , 它返回一個鍵—值對列表。 接下來, for 循環(huán)依次將每個鍵—值對存儲到指定的兩個變量中。 在前面的示例中, 我們使用這兩個變量來打印每個鍵及其相關(guān)聯(lián)的值. ![]() ![]()
6.3.2 遍歷字典中的所有鍵在不需要使用字典中的值時, 方法keys() 很有用。方法keys() 并非只能用于遍歷; 實(shí)際上, 它返回一個列表(但和列表有區(qū)別), 其中包含字典中的所有鍵. ![]() ![]() ![]() ![]() 6.3.3 按順序遍歷字典中的所有鍵字典總是明確地記錄鍵和值之間的關(guān)聯(lián)關(guān)系, 但獲取字典的元素時, 獲取順序是不可預(yù)測的。 這不是問題, 因?yàn)橥ǔD阆胍闹皇谦@取與鍵相關(guān)聯(lián)的正確的值。要以特定的順序返回元素, 一種辦法是在for 循環(huán)中對返回的鍵進(jìn)行排序。 為此, 可使用函數(shù)sorted() 來獲得按特定順序排列的鍵列表的副本,但不能使用list.sort()。 ![]() ![]() 6.3.4 遍歷字典中的所有值如果你感興趣的主要是字典包含的值, 可使用方法values() , 它返回一個值列表, 而不包含任何鍵。 ![]() ![]() 這種做法提取字典中所有的值, 而沒有考慮是否重復(fù)。 涉及的值很少時, 這也許不是問題, 但如果被調(diào)查者很多, 最終的列表可能包含大量的重復(fù)項。 為剔除重復(fù)項, 可使用集合(set) 。 集合 類似于列表, 但每個元素都必須是獨(dú)一無二的。 ![]() ![]() 動手試一試6-5 河流 : 創(chuàng)建一個字典, 在其中存儲三條大河流及其流經(jīng)的國家。 其中一個鍵—值對可能是'nile': 'egypt' 。
6-6 調(diào)查 : 在6.3.1節(jié)編寫的程序favorite_languages.py中執(zhí)行以下操作。
![]() ![]() 6.4 嵌套有時候, 需要將一系列字典存儲在列表中, 或?qū)⒘斜碜鳛橹荡鎯υ谧值渲校?這稱為嵌套 。 你可以在列表中嵌套字典、 在字典中嵌套列表甚至在字典中嵌套字典。 正如下面的示例將演示的, 嵌套是一項強(qiáng)大的功能。 6.4.1 字典列表字典alien_0 包含一個外星人的各種信息, 但無法存儲第二個外星人的信息, 更別說屏幕上全部外星人的信息了。 如何管理成群結(jié)隊的外星人呢? 一種辦法是創(chuàng)建一個外星人列表, 其中每個外星人都是一個字典, 包含有關(guān)該外星人的各種信息。 ![]() ![]() 更符合現(xiàn)實(shí)的情形是, 外星人不止三個, 且每個外星人都是使用代碼自動生成的。 在下面的示例中, 我們使用range() 生成了30個外星人: ![]() ![]() 6.4.2 在字典中存儲列表有時候, 需要將列表存儲在字典中, 而不是將字典存儲在列表中。 例如, 你如何描述顧客點(diǎn)的比薩呢? 如果使用列表, 只能存儲要添加的比薩配料; 但如果使用字典, 就不僅可在其中包含配料列表, 還可包含其他有關(guān)比薩的描述 ![]() ![]() 每當(dāng)需要在字典中將一個鍵關(guān)聯(lián)到多個值時, 都可以在字典中嵌套一個列表。 在本章前面有關(guān)喜歡的編程語言的示例中, 如果將每個人的回答都存儲在一個列表中, 被調(diào)查者就可選擇多種喜歡的語言。 在這種情況下, 當(dāng)我們遍歷字典時, 與每個被調(diào)查者相關(guān)聯(lián)的都是一個語言列表, 而不是一種語言; 因此, 在遍歷該字典的for 循環(huán)中, 我們需要再使用一個for 循環(huán)來遍歷與被調(diào)查者相關(guān)聯(lián)的語言列表: ![]() ![]() 6.4.3 在字典中存儲字典可在字典中嵌套字典, 但這樣做時, 代碼可能很快復(fù)雜起來。 例如, 如果有多個網(wǎng)站用戶, 每個都有獨(dú)特的用戶名, 可在字典中將用戶名作為鍵, 然后將每位用戶的信息存儲在一個字典中, 并將該字典作為與用戶名相關(guān)聯(lián)的值。 在下面的程序中, 對于每位用戶, 我們都存儲了其三項信息: 名、 姓和居住地; 為訪問這些信息, 我們遍歷所有的用戶名,并訪問與每個用戶名相關(guān)聯(lián)的信息字典: ![]() ![]() 動手試一試6-7 人 : 在為完成練習(xí)6-1而編寫的程序中, 再創(chuàng)建兩個表示人的字典, 然后將這三個字典都存儲在一個名為people 的列表中。 遍歷這個列表, 將其中每個人的所有信息都打印出來。 ![]() ![]() 6-9 喜歡的地方 : 創(chuàng)建一個名為favorite_places 的字典。 在這個字典中, 將三個人的名字用作鍵; 對于其中的每個人, 都存儲他喜歡的1~3個地方。 遍歷這個字典, 并將其中每個人的名字及其喜歡的地方打印出來。 ![]() ![]() 6-11 城市 : 創(chuàng)建一個名為cities 的字典, 其中將三個城市名用作鍵; 對于每座城市, 都創(chuàng)建一個字典, 并在其中包含該城市所屬的國家、 人口約數(shù)以及一個有關(guān)該城市的事實(shí)。 在表示每座城市的字典中, 應(yīng)包含country 、 population 和fact 等鍵。 將每座城市的名字以及有關(guān)它們的信息都打印出來。 ![]() ![]() 6.5 小結(jié)在本章中, 你學(xué)習(xí)了: 如何定義字典, 以及如何使用存儲在字典中的信息; 如何訪問和修改字典中的元素, 以及如何遍歷字典中的所有信息; 如何遍歷字典中所有的鍵-值對、 所有的鍵和所有的值; 如何在列表中嵌套字典、 在字典中嵌套列表以及在字典中嵌套字典。 在下一章中, 將學(xué)習(xí)while 循環(huán)以及如何從用戶那里獲取輸入。 ![]() |
|