




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教部編版二年級上冊22 狐假虎威教案及反思
- 三年級數(shù)學(xué)上冊 二 一位數(shù)乘兩位數(shù)、三位數(shù)的乘法第12課時(shí) 問題解決教學(xué)設(shè)計(jì) 西師大版
- 白酒企業(yè)員工培訓(xùn)
- 2024云南曲靖供電局所屬縣級供電企業(yè)項(xiàng)目制用工招聘60人筆試參考題庫附帶答案詳解
- 2024中鐵高質(zhì)量發(fā)展科學(xué)研究院有限責(zé)任公司招聘4人筆試參考題庫附帶答案詳解
- 六年級英語上冊 Unit 2 Ways to go to school Part A 第一課時(shí)教學(xué)設(shè)計(jì) 人教PEP
- 六年級品德與社會(huì)下冊 科技是把雙刃劍1教學(xué)設(shè)計(jì) 浙教版
- 三年級品德與社會(huì)上冊 不當(dāng)家不知柴米貴教學(xué)設(shè)計(jì) 未來版
- 一年級上美術(shù)教學(xué)設(shè)計(jì)-水墨游戲-蘇少版
- 六年級英語下冊 Recycle(The eighth period)第八課時(shí)教學(xué)設(shè)計(jì) 人教PEP
- Scratch電子學(xué)會(huì)等級考試四級模擬題
- 含油污水處理操作規(guī)程
- (2024年)公路工程工地試驗(yàn)檢測培訓(xùn)課件
- 云南省普通高中學(xué)生綜合素質(zhì)評價(jià)-基本素質(zhì)評價(jià)表
- 建筑工程制圖復(fù)習(xí)題三及建筑工程制圖與識圖
- 《長時(shí)記憶》課件
- 2024年中國華電集團(tuán)公司招聘筆試參考題庫含答案解析
- 客戶回訪表完整版本
- 人物傳記類文本閱讀復(fù)習(xí)策略
- 2024年天貓運(yùn)營月度計(jì)劃
- 巖溶地區(qū)建筑地基基礎(chǔ)技術(shù)規(guī)范
評論
0/150
提交評論