版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第五章 字典和集合本章將介紹一種通過名字引用值的數(shù)據(jù)結(jié)構(gòu),這種結(jié)構(gòu)類型稱為映射(mapping)。字典是Python中唯一內(nèi)建的映射類型,字典是另一種可變?nèi)萜髂P停纱鎯θ我忸愋蛯ο?。集合和字典類似,但集合沒有映射。Python快樂學(xué)習(xí)班的同學(xué)“參觀”學(xué)習(xí)完字符串主題園后,他們來到字典屋。在“序列號”大巴上時,導(dǎo)游給每位同學(xué)編了一個序號,在字典屋,Python快樂學(xué)習(xí)班的同學(xué)將通過序號找到同學(xué)的名稱,也將通過名稱找到序號?,F(xiàn)在讓我們陪同Python快樂學(xué)習(xí)班的同學(xué)一同進(jìn)入字典屋。第1頁,共36頁。5.1 認(rèn)識字典在Python中,字典是一種數(shù)據(jù)結(jié)構(gòu),這種結(jié)構(gòu)的功能就如它的命名一樣,可以像漢語字
2、典一樣使用。字典這個數(shù)據(jù)結(jié)構(gòu)的功能,就如這個名字一樣,可以像我們學(xué)習(xí)的時候使用漢語字典那樣來使用:在使用漢語字典時,我們即可以從頭到尾一頁一頁去查找某個字,也可以通過拼音索引或筆畫索引快速找到某個字,在漢語字典中找拼音索引和筆畫索引是很輕松簡單的。Python中對字典進(jìn)行了構(gòu)造,讓我們可以輕松查到某個特定的鍵(類似拼音或筆畫索引),從而通過鍵找到對應(yīng)的值(類似具體某個字)。第2頁,共36頁。假如需要創(chuàng)建一個可以存儲學(xué)生姓名和學(xué)號的小型數(shù)據(jù)庫,應(yīng)該怎么做呢?我們嘗試使用之前學(xué)習(xí)過的列表來實現(xiàn),輸入如下: students=小萌,小智,小強(qiáng),小張,小李 numbers=000,001,002,00
3、3,004 index_num=students.index(小智) print(f小智在students中的索引下標(biāo)是:index_num)小智在students中的索引下標(biāo)是:1 xiaozhi_num=numbersindex_num print(f小智在numbers中的序號是:xiaozhi_num)小智在numbers中的序號是:001輸出結(jié)果是我們想要的,但是看這個編寫的代碼,當(dāng)數(shù)據(jù)量比較大時,顯然是不適用的。我們想要的真正效果應(yīng)該是像使用index方法一樣,index返回的是索引位置,我們希望的直接返回索引位置上的值,比如像這樣: print(小智的序號是:,numbers小智
4、)小智的學(xué)號是: 001第3頁,共36頁。5.2 字典的創(chuàng)建和使用字典的創(chuàng)建格式如下: d = key1 : value1, key2 : value2 字典由多個鍵及與其對應(yīng)的值構(gòu)成的對組成(把鍵/值對稱為項)。字典的每個鍵/值(key/value)對用冒號(:)分割,每個項之間用逗號(,)分割,整個字典包括在花括號()中??兆值洌ú话ㄈ魏雾棧┯蓛蓚€大括號組成,如:。鍵必須是唯一的,但值則不必。值可以取任何數(shù)據(jù)類型,但鍵必須是不可變的,如字符串、數(shù)字或元組。簡單的字典示例: dict_define=小萌: 000, 小智: 001, 小強(qiáng): 002 dict_define小萌: 000,
5、小智: 001, 小強(qiáng): 002第4頁,共36頁。5.2.1 dict()函數(shù)的定義與使用可以用dict函數(shù),通過其他映射(比如其他字典)或者(鍵/值)這樣的序列對建立字典。看如下輸入: student=(name,小智),(number,001) student(name, 小智), (number, 001) type(student) student_info=dict(student) type(student_info) print(f學(xué)生信息:student_info)學(xué)生信息:name: 小智, number: 001第5頁,共36頁。 student_name=student_
6、infoname print(f學(xué)生姓名:student_name)學(xué)生姓名:小智 student_num=student_infonumber #從字典中輕松獲取學(xué)生序號 print(f學(xué)生序號:student_num)學(xué)生學(xué)號:001dict函數(shù)可以通過關(guān)鍵字參數(shù)的形式創(chuàng)建字典,操作示例如下: student_info=dict(name=小智,number=001) print(f學(xué)生信息:student_info)學(xué)生信息:name: 小智, number: 001通過關(guān)鍵字創(chuàng)建字典是dict()函數(shù)非常有用的一個功能,應(yīng)用非常便捷,在實際項目應(yīng)用中,可以多加使用。第6頁,共36頁。5
7、.2.2 操作字典字典的基本操作在很多方面與序列(sequence)類似,也支持修改、刪除等操作。下面進(jìn)行具體的講解。1. 字典的修改字典的修改包括字典的更新和新增兩個操作。如下示例: student=小萌:000,小智:001,小強(qiáng):002 print(f更改前,student:student)更改前,student:小萌: 000, 小智: 001, 小強(qiáng): 002 xiaoqiang_num=student小強(qiáng) print(f更改前,小強(qiáng)的序號是:xiaoqiang_num)更改前,小強(qiáng)的序號是:002 student小強(qiáng)=005 #更新小強(qiáng)的序號為005 xiaoqiang_num=s
8、tudent小強(qiáng) print(f更改后,小強(qiáng)的序號是:xiaoqiang_num)更改后,小強(qiáng)的序號是:005第7頁,共36頁。2.字典元素的刪除此處的刪除指的是顯式刪除,顯式刪除一個字典用del命令,如下示例: student=小強(qiáng): 002, 小萌: 000, 小智: 001, 小張: 003 print(f刪除前:student)刪除前:小強(qiáng): 002, 小萌: 000, 小智: 001, 小張: 003 del student小張 #刪除 鍵值為“小張”的鍵 print(f刪除后:student)刪除后:小強(qiáng): 002, 小萌: 000, 小智: 001除了刪除鍵,也可以刪除整個字典。
9、第8頁,共36頁。3. 字典的特性在Python中,字典中的值可以沒有限制地取任何值,既可以是標(biāo)準(zhǔn)對象,也可以是用戶定義的對象,但鍵不行。兩個重要的點(diǎn)需要記住:(1)在一個字典中,不允許同一個鍵出現(xiàn)兩次,即鍵不能相同。創(chuàng)建字典時如果同一個鍵被賦值兩次或以上,則最后一次的賦值會覆蓋前一次的賦值,輸入如下: student=小萌: 000, 小智: 001, 小萌: 002 #小萌賦兩次值,第一次000,第二次002 print(f學(xué)生信息:student)學(xué)生信息:小萌: 002, 小智: 001 #輸出結(jié)果中小萌的值為002示例中對鍵為小萌的元素做了兩次賦值操作,但輸出結(jié)果中只有一個鍵為小萌的
10、元素,并且對應(yīng)值為第二次的賦值。第9頁,共36頁。(2)字典中的鍵必須為不可變的,可以用數(shù)字、字符串或元組充當(dāng),但不能用列表,輸入如下: student=(name,):小萌,number:000 print(f學(xué)生信息:student)學(xué)生信息:(name,): 小萌, number: 000 student=name:小萌,number:000Traceback (most recent call last): File , line 1, in student=name:小萌,number:000TypeError: unhashable type: list在字典中,可以使用元組做鍵,
11、因為元組是不可變的。但不能用列表做鍵,因為列表是可變的,使用列表做鍵,運(yùn)行時會提示類型錯誤。第10頁,共36頁。4.字典中使用len()函數(shù)len(dict),該函數(shù)用于計算字典元素個數(shù),即鍵的總數(shù)??慈缦率纠?student=小萌: 000, 小智: 001, 小強(qiáng): 002,小張: 003, 小李: 004 print(f字典元素個數(shù)為:len(student)字典元素個數(shù)為:5 通過使用len()函數(shù),得到字典student變量中的元素個數(shù)為5。第11頁,共36頁。5.字典中使用type()函數(shù)type(variable),該函數(shù)返回輸入的變量類型,如果輸入變量是字典就返回字典類型???/p>
12、如下示例: student=小萌: 000, 小智: 001, 小強(qiáng): 002,小張: 003, 小李: 004 print(f字典的類型為:type(student)字典的類型為:第12頁,共36頁。5.2.3 字典和列表比較和list比較,dict有以下幾個特點(diǎn):(1)查找和插入的速度極快,不會隨著key的增加而變慢;(2)需要占用大量的內(nèi)存,內(nèi)存浪費(fèi)多。List的特點(diǎn)是:(1)查找和插入的時間隨著元素的增加而增加;(2)占用空間小,浪費(fèi)內(nèi)存很少。dict使用的是用空間來換取時間。dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的
13、第一條就是dict的key必須是不可變對象。第13頁,共36頁。5.3 字典方法就像其他內(nèi)建類型一樣,字典也有方法。這些方法非常有用,但是可能不會像使用列表或者字符串那樣頻繁的使用。在學(xué)習(xí)本節(jié)時可以先簡單瀏覽本節(jié)內(nèi)容,了解一下有哪些方法可用,然后在需要的時候再回過頭來查看特定方法的具體用法。第14頁,共36頁。5.3.1 get()方法get()方法返回指定鍵的值,如果值不在字典中返回默認(rèn)值。get()方法的語法:dict.get(key, default=None)dict代表的是指定字典,key代表字典中要查找的鍵,default代表如果指定鍵的值不存在時,返回該默認(rèn)值。返回指定鍵的值,如
14、果值不在字典中返回默認(rèn)值 None。示例如下: student=小萌: 000, 小智: 001 print (f小萌的學(xué)號為: num)小萌的學(xué)號為: 000get()方法使用起來比較簡單。在實際項目應(yīng)用中,get()方法使用非常多,在使用字典時,get()方法的使用幾乎是不可避免的。第15頁,共36頁。5.3.2 keys()方法keys()方法以列表返回一個字典所有的鍵。keys()方法的語法:dict.keys()此語法中dict代表的是指定字典,該方法不需要參數(shù)。返回一個字典所有的鍵。示例如下: student=小萌: 000, 小智: 001 all_keys=student.ke
15、ys() print(f字典student所有鍵為:all_keys)字典student所有鍵為:dict_keys(小萌, 小智) print(f字典student所有鍵為:list(all_keys) #keys()得到元組數(shù)組,轉(zhuǎn)成list,便于觀看字典student所有鍵為:小萌, 小智在實際項目應(yīng)用中,keys()方法的使用也非常多,經(jīng)常會遇到需要將字典中的鍵轉(zhuǎn)化為列表做操作的應(yīng)用。第16頁,共36頁。5.3.3 values()方法values()方法以列表形式返回字典中的所有值。values()方法的語法:dict.values()dict代表指定字典,values()方法不需要
16、參數(shù)。返回結(jié)果為字典中的所有值,所有值存放于一個列表中,與鍵的返回不同,值的返回結(jié)果中可以包含重復(fù)的元素。示例如下: student=小萌: 000, 小智: 1002,小李:002 all_values=student.values() print(fstudent字典所有值為:all_values)student字典所有值為:dict_values(000, 1002, 002) print(fstudent字典所有值為:list(all_values) #values()得到元組數(shù)組,轉(zhuǎn)成list,便于觀看student字典所有值為:000, 1002, 002在實際項目應(yīng)用中,valu
17、es()方法的使用也非常多,經(jīng)常會遇到需要將字典中的值轉(zhuǎn)化為列表做操作的應(yīng)用,并且一般會和keys()方法一起使用。第17頁,共36頁。5.3.4 key in dict方法Python字典in操作符用于判斷鍵是否存在于字典中。該方法的語法:key in dict此語法中dict代表的是指定字典,key代表要在字典中查找的鍵。如果鍵在字典里返回true,否則返回false。示例如下: student=小萌: 000, 小智: 001 xm_in_stu=小萌 in student print(f小萌在student字典中:xm_in_stu)小萌在student字典中:True xq_in_s
18、tu=小強(qiáng) in student print(f小強(qiáng)在student字典中:xq_in_stu)小強(qiáng)在student字典中:False在實際項目應(yīng)用中,key in dict方法應(yīng)用也比較多,一般多用于判斷某個鍵是否在字典中,以此來判定下一步的執(zhí)行計劃。第18頁,共36頁。5.3.5 update()方法update()方法用于把一個字典A的鍵值對更新到另一個字典B里。update()方法的語法:dict.update(dict2)此語法中dict代表的是指定字典,dict2代表添加到指定字典dict里的字典。該方法沒有任何返回值。示例如下: student=小萌: 000, 小智: 001
19、student2=小李:003 print(f原student字典為:student)原student字典為:小萌: 000, 小智: 001 student.update(student2) print(f新student字典為:student)新student字典為:小萌: 000, 小智: 001, 小李: 003在實際項目應(yīng)用中,update()方法的使用不是很多,一般用于將兩個字典合并。第19頁,共36頁。5.3.6 clear()方法clear()方法用于刪除字典內(nèi)的所有元素。clear()方法的語法:dict.clear()此語法中,dict代表指定字典,該方法不需要參數(shù)。該函數(shù)
20、是一個原地操作函數(shù),沒有任何返回值(返回值為None)。示例如下: student=小萌: 000, 小智: 001, 小強(qiáng): 002,小張: 003 print(f字典元素個數(shù)為:len(student)字典元素個數(shù)為:4 student.clear() print(f字典刪除后元素個數(shù)為:len(student)字典刪除后元素個數(shù)為:0 在實際項目應(yīng)用中,clear()方法的使用不是很多,一般在大批量遍歷時,會使用clear()方法清空一個字典,便于下一次遍歷使用。第20頁,共36頁。5.3.7 copy()方法copy()方法用于返回一個具有相同鍵值對的新字典。copy()方法的語法:d
21、ict.copy()此語法中,dict代表指定字典,該方法不需要參數(shù)。該方法的返回結(jié)果為一個字典的淺復(fù)制(shallow copy)。示例如下: student=小萌: 000, 小智: 001, 小強(qiáng): 002,小張: 003 st=student.copy() print(f復(fù)制student后得到的st為:st)復(fù)制student后得到的st為:小萌: 000, 小智: 001, 小強(qiáng): 002, 小張: 003使用copy()方法可以將一個字典變量復(fù)制給另一個變量。第21頁,共36頁。通過下面的示例介紹什么是淺復(fù)制。 student=小智: 001, info:小張,003,man s
22、t=student.copy() st小智=1005 print(f更改copy后的st為:st)更改copy后的st為:小智: 1005, info: 小張, 003, man print(f原字符串為:student)原字符串為:小智: 001, info: 小張, 003, man stinfo.remove(man) print(f變量st中刪除man后,st變?yōu)椋簊t)變量st中刪除man后,st變?yōu)椋盒≈? 1005, info: 小張, 003 print(f刪除后student為:student)刪除后student為:小智: 001, info: 小張, 003在實際項目應(yīng)用
23、中,copy()方法的使用不多。當(dāng)然,在用到copy()可以實現(xiàn)的功能時,要毫不猶豫地使用copy()方法。第22頁,共36頁。5.3.8 fromkeys()方法fromkeys()方法用于創(chuàng)建一個新字典。fromkeys()方法的語法:dict.fromkeys(seq, value)dict代表指定字典,seq代表字典鍵值列表,value代表可選參數(shù),設(shè)置鍵序列(seq)的值。該方法的返回結(jié)果為列表。示例如下: seq=(name, age, sex) info=dict.fromkeys(seq) print (f新的字典為:info)新的字典為:name: None, age: No
24、ne, sex: None info=dict.fromkeys(seq, 10) print(f新的字典為:info)新的字典為:name: 10, age: 10, sex: 10在實際項目應(yīng)用中,fromkeys()方法的使用不多,更多地用于初始化一個新字典。第23頁,共36頁。5.3.9 items()方法items()方法以列表返回可遍歷的(鍵, 值) 元組數(shù)組。items()方法的語法:dict.items()dict代表指定字典,該方法不需要參數(shù)。返回結(jié)果為可遍歷的(鍵/值)元組數(shù)組。示例如下: student=小萌: 000, 小智: 001 print(f調(diào)用items方法的
25、結(jié)果:student.items()調(diào)用items方法的結(jié)果:dict_items(小萌, 000), (小智, 001)在Python 2.x中提供了一個iteritems()方法,iteritems()方法和items()方法的作用大致相同,但是iteritems()方法返回的是一個迭代器對象,而不是列表。在Python 3.x中沒有iteritems()方法。在實際項目應(yīng)用中,items()方法使用得不多。第24頁,共36頁。5.3.10 setdefault()方法setdefault()方法和get()方法類似,用于獲得與給定鍵相關(guān)聯(lián)的值。setdefault()方法的語法:dict
26、.setdefault(key, default=None)dict代表指定字典,key代表查找的鍵值,default代表鍵不存在時設(shè)置的默認(rèn)鍵值。setdefault()方法返回key在字典中對應(yīng)的值,如果鍵不存在于字典中,就會添加鍵并將值設(shè)為默認(rèn)值,然后返回新設(shè)置的默認(rèn)值。示例如下: student=小萌: 000, 小智: 001 xq=student.setdefault(小強(qiáng)) print(f小強(qiáng)的鍵值為:xq_default)小強(qiáng)的鍵值為:None xz=student.setdefault(小智) print(f小智的鍵值為:xz)小智的鍵值為:001 print(fstuden
27、t字典新值為:student)student字典新值為:小萌: 000, 小智: 001, 小強(qiáng): None在實際項目應(yīng)用中,setdefault()方法的使用不多。第25頁,共36頁。5.4 集合前面介紹了Python中的字典,Python中的字典是對數(shù)學(xué)中映射概念支持的直接體現(xiàn)。接下來將講解一個和字典非常相似的對象:集合。示例如下: student= print(fstudent對象的類型為:type(student)student對象的類型為: number=1,2,3 print(fnumber對象的類型為:type(number)number對象的類型為:這里出現(xiàn)了一個新的類型set
28、。第26頁,共36頁。在Python中,用花括號括起一些元素,元素之間直接用逗號分隔,這就是集合。集合在Python中的特性可以概括為兩個字:唯一。示例如下: numbers=1,2,3,4,5,3,2,1,6 numbers1, 2, 3, 4, 5, 6set集合中輸出的結(jié)果自動將重復(fù)數(shù)據(jù)清除了。集合是無序的,不能通過索引下標(biāo)的方式從集合中取得某個元素。例如: numbers=1,2,3,4,5 numbers2Traceback (most recent call last): File , line 1, in numbers2TypeError: set object does no
29、t support indexing第27頁,共36頁。5.4.1 創(chuàng)建集合創(chuàng)建集合有兩種方法:一種是直接把元素用花括號()括起來,花括號中的元素之間用英文模式下的逗號(,)分隔;另一種是用set(obj)方法定義,obj為一個元素、一個列表或元組。例如: numbers=1,2,3,4,5 print(fnumbers變量的類型為:type(numbers)numbers變量的類型為: numbers1, 2, 3, 4, 5 name=set(abc) #一個元素,仔細(xì)觀察輸出結(jié)果 namea, b, c print(fname變量的類型為:type(name)name變量的類型為:第28頁,共36頁。5.4.2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年花卉保養(yǎng)服務(wù)協(xié)議范本
- 2023-2024學(xué)年浙江省溫州市蒼南縣金鄉(xiāng)衛(wèi)城中學(xué)高三5月第二次聯(lián)考數(shù)學(xué)試題文試卷
- 2023-2024學(xué)年浙江省金蘭教育合作組織高三下學(xué)期質(zhì)量調(diào)查(一)數(shù)學(xué)試題
- 2024年設(shè)計服務(wù)外包協(xié)議范本2
- 2024年深度鉆井工程服務(wù)協(xié)議
- 2024年荒山開發(fā)承包協(xié)議樣本
- 2024年個人消費(fèi)貸款協(xié)議模板指南
- 2024年適用車輛租賃長租協(xié)議樣式
- 底商租賃協(xié)議精簡(2024年)
- 2024移動網(wǎng)絡(luò)運(yùn)營商服務(wù)協(xié)議
- 2024-2030年再生醫(yī)學(xué)市場發(fā)展行情監(jiān)測及前景運(yùn)營態(tài)勢趨向研判研究報告
- 2020年山東煙臺中考滿分作文《就這樣被打動》9
- 2024-2030年中國盾構(gòu)機(jī)行業(yè)發(fā)展趨勢與投資策略建議報告
- 期中核心素質(zhì)卷(試題)-2024-2025學(xué)年數(shù)學(xué)六年級上冊北師大版
- 2024年重慶高考化學(xué)試題卷(含答案解析)
- 堅持人民至上以人民為中心心得體會三篇
- 2024年新人教版數(shù)學(xué)七年級上冊 3.2 求代數(shù)式的值 教學(xué)課件
- 2025屆四川省綿陽市高三第一次調(diào)研測試物理試卷含解析
- 初中足球運(yùn)球技術(shù)教案
- 華為HCIA OpenEuler H12-611認(rèn)證必考試復(fù)習(xí)題庫(含答案)
- 2024-2030年中國原油行業(yè)發(fā)展趨勢及發(fā)展前景研究報告
評論
0/150
提交評論