Python語言程序設(shè)計(jì)基礎(chǔ) 課件 第5章 字典與集合_第1頁
Python語言程序設(shè)計(jì)基礎(chǔ) 課件 第5章 字典與集合_第2頁
Python語言程序設(shè)計(jì)基礎(chǔ) 課件 第5章 字典與集合_第3頁
Python語言程序設(shè)計(jì)基礎(chǔ) 課件 第5章 字典與集合_第4頁
Python語言程序設(shè)計(jì)基礎(chǔ) 課件 第5章 字典與集合_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第5章字典與集合5.1字典的創(chuàng)建與訪問5.2字典的常見操作5.3字典的常用方法5.4字典的高級應(yīng)用5.5集合5.6字典與集合的應(yīng)用實(shí)例本章小結(jié)

5.1字典的創(chuàng)建與訪問

Python語言中的字典是一種無序的、可變的、鍵值對(key-valuepair)集合的數(shù)據(jù)結(jié)構(gòu)。字典中的每個(gè)元素都是一個(gè)鍵值對,其中鍵(key)是唯一的,用于查找對應(yīng)的值(value)。字典的鍵通常是不可變的數(shù)據(jù)類型(如整數(shù)、浮點(diǎn)數(shù)、字符串、元組等),而值可以是任何數(shù)據(jù)類型。字典提供了快速查找、添加和刪除元素的操作,使其成為存儲(chǔ)關(guān)聯(lián)數(shù)據(jù)(如數(shù)據(jù)庫記錄或配置文件)的理想選擇。

5.1.1字典的創(chuàng)建

在Python中,字典可以通過多種方式創(chuàng)建,最常見的是使用花括號{}和鍵值對語法。每個(gè)鍵值對之間使用逗號分隔,鍵和值之間使用冒號分隔。

假設(shè)某個(gè)學(xué)校的學(xué)生管理系統(tǒng)中有表5-1所示的學(xué)生信息,包括學(xué)生的學(xué)號和姓名,且學(xué)號和姓名一一對應(yīng)。下面創(chuàng)建一個(gè)字典,用來存放這些學(xué)生的學(xué)號和姓名。

【例5-1】

創(chuàng)建字典。

例5-1創(chuàng)建了一個(gè)名為students的字典,其中第一個(gè)鍵“10001”對應(yīng)的值是“張三”,第二個(gè)鍵“10002”對應(yīng)的值是“李四”。鍵值對提供了一種靈活且高效地組織和檢索數(shù)據(jù)的方式。

也可以用內(nèi)置函數(shù)dict()來創(chuàng)建字典,如例5-2所示。

【例5-2】

通過dict()創(chuàng)建字典。

在Python中創(chuàng)建字典時(shí)需要注意以下幾點(diǎn)。

(1)鍵的唯一性。字典的鍵必須是唯一的,如果嘗試使用相同的鍵兩次,第二次的賦值會(huì)覆蓋第一次的值。

(2)鍵的不可變性。字典的鍵必須是不可變的數(shù)據(jù)類型,如整數(shù)、浮點(diǎn)數(shù)、字符串、元組等。列表、集合和字典等可變的數(shù)據(jù)類型不能用作字典的鍵。

(3)避免使用復(fù)雜或易混淆的鍵。雖然技術(shù)上可以使用任何不可變的數(shù)據(jù)類型作為鍵,但最好使用簡單、清晰且不易混淆的鍵,以便于后續(xù)維護(hù)和理解代碼。

(4)避免使用Python內(nèi)置的特殊方法名(如__init__、__str__等)作為字典的鍵,因?yàn)檫@可能會(huì)導(dǎo)致意外的行為或錯(cuò)誤。

(5)避免使用保留字作為字典的鍵。雖然Python允許使用保留字(如if、for、while等)作為字典的鍵,但這樣做可能會(huì)使代碼難以理解。

(6)使用合適的鍵名。鍵名應(yīng)該清晰地表達(dá)它們所代表的含義。使用有意義的鍵名可以提高代碼的可讀性。

(7)避免使用長字符串作為字典的鍵。如果鍵是長字符串,考慮是否可以使用更簡短的字符串或其他不可變類型作為鍵,以提高性能和可讀性。

(8)注意字典的內(nèi)存占用。字典會(huì)占用一定的內(nèi)存空間,特別是在處理大量數(shù)據(jù)時(shí)。因此,在創(chuàng)建字典時(shí)應(yīng)考慮內(nèi)存使用的限制。

5.1.2字典的訪問

字典中存儲(chǔ)了若干無序的條目,這意味著字典沒有索引的概念,訪問字典中的值通常是通過鍵來實(shí)現(xiàn)的。當(dāng)要訪問字典里的值時(shí),我們只需使用dictionaryName[key]編寫一個(gè)表達(dá)式即可。其中,dictionaryName表示想要訪問的那個(gè)字典的變量名,[key]代表想要訪問的鍵。如果該鍵在字典中,則會(huì)返回其對應(yīng)的值。

【例5-3】

訪問字典中的值。

以上代碼的輸出結(jié)果如下:

需要注意的是,當(dāng)嘗試獲取一個(gè)不存在的關(guān)鍵字所對應(yīng)的值時(shí),系統(tǒng)會(huì)提示“KeyError”異常。

在標(biāo)準(zhǔn)的字典數(shù)據(jù)結(jié)構(gòu)中,通常是不能直接通過值來訪問鍵的。字典是通過鍵來快速定位值的,而不是通過值來定位鍵的。這是因?yàn)樽值涫且怨1淼男问綄?shí)現(xiàn)的,它通過鍵的哈希值來定位對應(yīng)的值,而不是通過值的哈希值來定位對應(yīng)的鍵。

5.2字典的常見操作

1.字典更新字典創(chuàng)建后可根據(jù)需要對其進(jìn)行增加或修改鍵值對操作。添加一個(gè)新的鍵值對到字典中,或者修改字典中現(xiàn)有鍵的值,可以使用以下語法:其中,dictionaryName表示字典名,key表示鍵,value表示值。

【例5-4】

增加或者修改值。

以上代碼的輸出結(jié)果如下:

當(dāng)不再需要字典中的某一條目時(shí),可以使用刪除操作。刪除字典中條目的語法格式如下:

【例5-5】

刪除值。

【例5-6】

清空字典條目。

【例5-7】

刪除字典。

2.獲取字典的長度

在Python中,如果需要得到字典的長度,可以使用“l(fā)en()”函數(shù):

該函數(shù)返回字典條目的個(gè)數(shù),即鍵值對的總個(gè)數(shù)。

【例5-8】

返回字典長度。

3.查找字典條目

若要判斷字典中是否存在某個(gè)鍵,可以使用“in”或“notin”運(yùn)算符。

【例5-9】

使用in或notin運(yùn)算符判斷字典中是否存在某個(gè)鍵。

4.判斷兩個(gè)字典是否相同

若要判斷兩個(gè)字典是否相同,可以使用“==”和“!=”運(yùn)算符。

【例5-10】

相等性檢測。

5.字典合并

若要將兩個(gè)字典合并成一個(gè),可以使用合并操作符“|”。

【例5-11】

字典合并。

5.3字典的常用方法

除了上述的字典常用操作,Python還提供了許多內(nèi)置方法來操作字典。表5-2列出了可以被字典對象調(diào)用的一些常用方法。

【例5-12】

字典的常用方法。

以上代碼的輸出結(jié)果如下:

5.4字典的高級應(yīng)用

5.4.1字典的嵌套嵌套字典是指在一個(gè)字典中包含一個(gè)或多個(gè)其他字典。這樣的結(jié)構(gòu)可以創(chuàng)建復(fù)雜的數(shù)據(jù)組織形式,類似于樹狀結(jié)構(gòu)。嵌套字典能夠有效地存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù),表示復(fù)雜的層次結(jié)構(gòu),每個(gè)層次都包含多個(gè)鍵值對。通過嵌套字典,將相關(guān)的數(shù)據(jù)組織在一起,以便更好地組織和管理數(shù)據(jù),更容易地訪問和操作。

【例5-13】

嵌套字典。

【例5-14】

訪問嵌套字典。

【例5-16】

向嵌套字典中添加新的鍵值對。

若要?jiǎng)h除嵌套字典中的指定鍵值對,可以使用del關(guān)鍵字和多級索引定位到要?jiǎng)h除的位置。

【例5-17】

刪除嵌套字典。

【例5-18】

遍歷嵌套字典。

5.4.2字典的遍歷

使用for循環(huán)是遍歷字典最常見的方法,可以分別遍歷字典的鍵、值或鍵值對。

【例5-19】

使用for循環(huán)遍歷字典。

以上代碼的輸出結(jié)果如下:

除了使用for循環(huán),還有很多方法來遍歷字典。比如字典推導(dǎo)式,這是一種在Python中用來快速創(chuàng)建字典的方法,它允許從一個(gè)可迭代的對象(通常是另一個(gè)字典)中生成一個(gè)新的字典,同時(shí)可以根據(jù)條件過濾和轉(zhuǎn)換數(shù)據(jù)。也可以在字典推導(dǎo)式中遍歷原字典的鍵和值,并根據(jù)條件創(chuàng)建新的鍵值對。

字典推導(dǎo)式的基本語法格式如下:

其中:“key_expression”為生成字典鍵的表達(dá)式;“value_expression”為生成字典值的表達(dá)式;“item”為可迭代對象中的每個(gè)元素;“iterable”用來迭代生成字典的對象,通常是一個(gè)字典的items()方法(返回鍵值對)或者keys()方法(返回鍵);“condition(可選)”為條件表達(dá)式,用于過濾要包含在最終字典中的元素。

【例5-20】

使用字典推導(dǎo)式遍歷字典。

以上代碼的輸出結(jié)果如下:

本例中“id:name”定義了新字典中的鍵值對結(jié)構(gòu);“forid,nameinstudents.items()”表示從students字典的鍵值對中進(jìn)行迭代;“ifint(id)>10001”是一個(gè)條件,只有當(dāng)學(xué)號大于10001時(shí)才選擇該鍵值對。使用字典推導(dǎo)式可以使代碼更簡潔和易于理解,特別是在需要根據(jù)現(xiàn)有數(shù)據(jù)創(chuàng)建或轉(zhuǎn)換字典時(shí)非常有用。

【例5-21】

使用enumerate()函數(shù)遍歷字典。

5.4.3字典的排序

相比于列表,字典是一個(gè)無序的數(shù)據(jù)結(jié)構(gòu),一般不進(jìn)行排序,但是如果想要對字典進(jìn)行排序,可以通過sorted()函數(shù)實(shí)現(xiàn)。sorted()函數(shù)可以對序列進(jìn)行排序,并將排序結(jié)果放到一個(gè)列表中,然后返回這個(gè)列表。

【例5-22】

字典排序。

在排序時(shí),key參數(shù)指定排序的依據(jù),lambda匿名函數(shù)用于獲取排序依據(jù)。s是鍵值對組成的元組,s[0]獲取元組中的第一個(gè)元素,即鍵。上述排序默認(rèn)是升序,如果需要降序排列,則將sorted()函數(shù)中的reverse參數(shù)設(shè)定為True即可。

5.5集

集合是Python中的一種數(shù)據(jù)結(jié)構(gòu),與列表、元組、字典等數(shù)據(jù)結(jié)構(gòu)不同,它沒有重復(fù)的元素。它是一個(gè)無序且沒有重復(fù)元素的序列,集合中的元素必須是可hash對象,即數(shù)字、字符串、元組等不可變對象。集合不記錄元素的位置和插入順序,因此不支持索引、切片等其他序列類的操作。集合有以下幾個(gè)特征:

(1)集合中的元素是無序的,也就是說,每次創(chuàng)建集合時(shí),集合中的元素的順序可能不同。

(2)集合中的元素是唯一的,也就是說,集合中的元素不能重復(fù)。

(3)集合是可變的,也就是說,可以在集合中添加、刪除元素。

5.5.1集合的創(chuàng)建

創(chuàng)建集合的方法有兩種:使用“{}”和使用set()函數(shù)。其中,定義空集合不能使用“{}”,因?yàn)椤皗}”是創(chuàng)建空字典的方法,但可以使用set()函數(shù)。使用“{}”創(chuàng)建的集合中的元素必須是不可變的,元素與元素之間要保證不相同。例如:

5.5.2集合的訪問

由于Python的集合是無序的,也沒有鍵和值的概念,因此,在進(jìn)行集合訪問時(shí)通常使用for循環(huán)的遍歷訪問或通過集合名稱整體輸出。

【例5-23】

在一個(gè)整數(shù)列表中隨機(jī)選擇10個(gè)元素并輸出其中互不相同的數(shù)。

【分析】

這里需要用到random庫中的randint()函數(shù)和choice()函數(shù)。首先,創(chuàng)建一個(gè)整數(shù)列表,然后在該列表中隨機(jī)選擇10個(gè)元素,最后通過set()函數(shù)去重。

【參考代碼】

以上代碼的運(yùn)行結(jié)果如下:

5.5.3集合的數(shù)學(xué)運(yùn)算

交集、并集、差集和對稱差集是數(shù)學(xué)運(yùn)算中常見的四種運(yùn)算。表5-3展示了數(shù)學(xué)里集合的不同運(yùn)算在Python中所對應(yīng)的運(yùn)算符和方法。

【例5-24】

某學(xué)校有兩個(gè)班級,班級A需要學(xué)習(xí)數(shù)學(xué)、語文、英語、物理、化學(xué)和生物,班級B需要學(xué)習(xí)數(shù)學(xué)、語文、英語、政治、地理和歷史。請使用Python語言實(shí)現(xiàn)兩個(gè)班級課程的交集、并集、差集和對稱差集。

【分析】

班級A和班級B的交集為數(shù)學(xué)、語文和英語;并集為數(shù)學(xué)、語文、英語、物理、化學(xué)、生物、政治、地理、歷史;差集為物理、化學(xué)和生物;對稱差集為物理、化學(xué)、生物、政治、地理、歷史。

【參考代碼】

以上代碼的輸出結(jié)果如下:

5.5.4集合的比較運(yùn)算符

比較運(yùn)算符是用于對常量、變量或表達(dá)式的結(jié)果進(jìn)行大小及是否相同的比較。比較的結(jié)果為布爾(bool)類型,如果結(jié)果成立,則返回True(真),否則返回False(假)。表5-4列出了返回值是True和False的方法和比較運(yùn)算符。

【例5-25】

集合的比較。

以上代碼的運(yùn)行結(jié)果如下:

5.5.5集合的基本操作

除了與數(shù)學(xué)里的集合計(jì)算有關(guān)的方法和運(yùn)算符,集合類型還有一些為了實(shí)用性而添加的方法,其匯總?cè)绫?-5所示。

【例5-26】

集合的基本操作。

5.6字典與集合的應(yīng)用實(shí)例

【例5-27】

假設(shè)一位教育工作者負(fù)責(zé)管理一所學(xué)校的學(xué)生成績。現(xiàn)在需要一個(gè)簡單而有效的系統(tǒng)來存儲(chǔ)和管理學(xué)生的信息以及他們的成績。請開發(fā)一個(gè)學(xué)生成績管理系統(tǒng),用于存儲(chǔ)學(xué)生的姓名和對應(yīng)的成績,并提供以下功能:

(1)添加學(xué)生的姓名和成績;

(2)查找特定學(xué)生的成績;

(3)顯示所有學(xué)生及其成績(按成績升序);

(4)計(jì)算班級平均成績。

【參考代碼】

以上代碼的輸出結(jié)果如下:

【例5-28】

假設(shè)一所大學(xué)的教務(wù)管理人員需要開發(fā)一個(gè)系統(tǒng)來管理學(xué)生的課程考試成績。該系統(tǒng)的功能包括:存儲(chǔ)每個(gè)學(xué)生的成績;計(jì)算每個(gè)學(xué)生的平均成績;找出某門課程所有學(xué)生的成績;找出

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論