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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

5.1.1字典的創(chuàng)建

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

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

【例5-1】

創(chuàng)建字典。

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

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

【例5-2】

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

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

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

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

(3)避免使用復(fù)雜或易混淆的鍵。雖然技術(shù)上可以使用任何不可變的數(shù)據(jù)類(lèi)型作為鍵,但最好使用簡(jiǎn)單、清晰且不易混淆的鍵,以便于后續(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)避免使用長(zhǎng)字符串作為字典的鍵。如果鍵是長(zhǎng)字符串,考慮是否可以使用更簡(jiǎn)短的字符串或其他不可變類(lèi)型作為鍵,以提高性能和可讀性。

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

5.1.2字典的訪問(wèn)

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

【例5-3】

訪問(wèn)字典中的值。

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

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

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

5.2字典的常見(jiàn)操作

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

【例5-4】

增加或者修改值。

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

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

【例5-5】

刪除值。

【例5-6】

清空字典條目。

【例5-7】

刪除字典。

2.獲取字典的長(zhǎng)度

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

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

【例5-8】

返回字典長(zhǎng)度。

3.查找字典條目

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

【例5-9】

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

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

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

【例5-10】

相等性檢測(cè)。

5.字典合并

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

【例5-11】

字典合并。

5.3字典的常用方法

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

【例5-12】

字典的常用方法。

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

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

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

【例5-13】

嵌套字典。

【例5-14】

訪問(wèn)嵌套字典。

【例5-16】

向嵌套字典中添加新的鍵值對(duì)。

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

【例5-17】

刪除嵌套字典。

【例5-18】

遍歷嵌套字典。

5.4.2字典的遍歷

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

【例5-19】

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

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

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

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

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

【例5-20】

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

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

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

【例5-21】

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

5.4.3字典的排序

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

【例5-22】

字典排序。

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

5.5集

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

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

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

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

5.5.1集合的創(chuàng)建

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

5.5.2集合的訪問(wèn)

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

【例5-23】

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

【分析】

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

【參考代碼】

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

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

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

【例5-24】

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

【分析】

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

【參考代碼】

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

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

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

【例5-25】

集合的比較。

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

5.5.5集合的基本操作

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

【例5-26】

集合的基本操作。

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

【例5-27】

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

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

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

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

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

【參考代碼】

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

【例5-28】

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論