




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第五章字典和集合本章將介紹一種通過名字引用值的數(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)入字典屋。5.1認(rèn)識字典在Python中,字典是一種數(shù)據(jù)結(jié)構(gòu),這種結(jié)構(gòu)的功能就如它的命名一樣,可以像漢語字典一樣使用。字典這個數(shù)據(jù)結(jié)構(gòu)的功能,就如這個名字一樣,可以像我們學(xué)習(xí)的時候使用《漢語字典》那樣來使用:在使用漢語字典時,我們即可以從頭到尾一頁一頁去查找某個字,也可以通過拼音索引或筆畫索引快速找到某個字,在漢語字典中找拼音索引和筆畫索引是很輕松簡單的。Python中對字典進(jìn)行了構(gòu)造,讓我們可以輕松查到某個特定的鍵(類似拼音或筆畫索引),從而通過鍵找到對應(yīng)的值(類似具體某個字)。假如需要創(chuàng)建一個可以存儲學(xué)生姓名和學(xué)號的小型數(shù)據(jù)庫,應(yīng)該怎么做呢?我們嘗試使用之前學(xué)習(xí)過的列表來實現(xiàn),輸入如下:>>>students=['小萌','小智','小強(qiáng)','小張','小李']>>>numbers=['000','001','002','003','004']>>>index_num=students.index("小智")>>>print(f'小智在students中的索引下標(biāo)是:{index_num}')小智在students中的索引下標(biāo)是:1>>>xiaozhi_num=numbers[index_num]>>>print(f'小智在numbers中的序號是:{xiaozhi_num}')小智在numbers中的序號是:001輸出結(jié)果是我們想要的,但是看這個編寫的代碼,當(dāng)數(shù)據(jù)量比較大時,顯然是不適用的。我們想要的真正效果應(yīng)該是像使用index方法一樣,index返回的是索引位置,我們希望的直接返回索引位置上的值,比如像這樣:>>>print('小智的序號是:',numbers['小智'])小智的學(xué)號是:0015.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','小智':'001','小強(qiáng)':'002'}5.2.1dict()函數(shù)的定義與使用可以用dict函數(shù),通過其他映射(比如其他字典)或者(鍵/值)這樣的序列對建立字典。看如下輸入:>>>student=[('name','小智'),('number','001')]>>>student[('name','小智'),('number','001')]>>>type(student)<class'list'>>>>student_info=dict(student)>>>type(student_info)<class'dict'>>>>print(f'學(xué)生信息:{student_info}')學(xué)生信息:{'name':'小智','number':'001'}>>>student_name=student_info['name']>>>print(f'學(xué)生姓名:{student_name}')學(xué)生姓名:小智>>>student_num=student_info['number']#從字典中輕松獲取學(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)用中,可以多加使用。5.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=student['小強(qiáng)']>>>print(f'更改后,小強(qiáng)的序號是:{xiaoqiang_num}')更改后,小強(qiáng)的序號是:0052.字典元素的刪除此處的刪除指的是顯式刪除,顯式刪除一個字典用del命令,如下示例:>>>student={'小強(qiáng)':'002','小萌':'000','小智':'001','小張':'003'}>>>print(f'刪除前:{student}')刪除前:{'小強(qiáng)':'002','小萌':'000','小智':'001','小張':'003'}>>>delstudent['小張']#刪除鍵值為“小張”的鍵>>>print(f'刪除后:{student}')刪除后:{'小強(qiáng)':'002','小萌':'000','小智':'001'}除了刪除鍵,也可以刪除整個字典。3.字典的特性在Python中,字典中的值可以沒有限制地取任何值,既可以是標(biāo)準(zhǔn)對象,也可以是用戶定義的對象,但鍵不行。兩個重要的點(diǎn)需要記?。海?)在一個字典中,不允許同一個鍵出現(xiàn)兩次,即鍵不能相同。創(chuàng)建字典時如果同一個鍵被賦值兩次或以上,則最后一次的賦值會覆蓋前一次的賦值,輸入如下:>>>student={'小萌':'000','小智':'001','小萌':'002'}#小萌賦兩次值,第一次000,第二次002>>>print(f'學(xué)生信息:{student}')學(xué)生信息:{'小萌':'002','小智':'001'}#輸出結(jié)果中小萌的值為002示例中對鍵為小萌的元素做了兩次賦值操作,但輸出結(jié)果中只有一個鍵為小萌的元素,并且對應(yīng)值為第二次的賦值。(2)字典中的鍵必須為不可變的,可以用數(shù)字、字符串或元組充當(dāng),但不能用列表,輸入如下:>>>student={('name',):'小萌','number':'000'}>>>print(f'學(xué)生信息:{student}')學(xué)生信息:{('name',):'小萌','number':'000'}>>>student={['name']:'小萌','number':'000'}Traceback(mostrecentcalllast):File"<pyshell#11>",line1,in<module>student={['name']:'小萌','number':'000'}TypeError:unhashabletype:'list'在字典中,可以使用元組做鍵,因為元組是不可變的。但不能用列表做鍵,因為列表是可變的,使用列表做鍵,運(yùn)行時會提示類型錯誤。4.字典中使用len()函數(shù)len(dict),該函數(shù)用于計算字典元素個數(shù),即鍵的總數(shù)??慈缦率纠?gt;>>student={'小萌':'000','小智':'001','小強(qiáng)':'002','小張':'003','小李':'004'}>>>print(f'字典元素個數(shù)為:{len(student)}')字典元素個數(shù)為:5通過使用len()函數(shù),得到字典student變量中的元素個數(shù)為5。5.字典中使用type()函數(shù)type(variable),該函數(shù)返回輸入的變量類型,如果輸入變量是字典就返回字典類型??慈缦率纠?gt;>>student={'小萌':'000','小智':'001','小強(qiáng)':'002','小張':'003','小李':'004'}>>>print(f'字典的類型為:{type(student)}')字典的類型為:<class'dict'>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非常重要,需要牢記的第一條就是dict的key必須是不可變對象。5.3字典方法就像其他內(nèi)建類型一樣,字典也有方法。這些方法非常有用,但是可能不會像使用列表或者字符串那樣頻繁的使用。在學(xué)習(xí)本節(jié)時可以先簡單瀏覽本節(jié)內(nèi)容,了解一下有哪些方法可用,然后在需要的時候再回過頭來查看特定方法的具體用法。5.3.1get()方法get()方法返回指定鍵的值,如果值不在字典中返回默認(rèn)值。get()方法的語法:dict.get(key,default=None)dict代表的是指定字典,key代表字典中要查找的鍵,default代表如果指定鍵的值不存在時,返回該默認(rèn)值。返回指定鍵的值,如果值不在字典中返回默認(rèn)值None。示例如下:>>>student={'小萌':'000','小智':'001'}>>>print(f'小萌的學(xué)號為:{num})')小萌的學(xué)號為:000get()方法使用起來比較簡單。在實際項目應(yīng)用中,get()方法使用非常多,在使用字典時,get()方法的使用幾乎是不可避免的。5.3.2keys()方法keys()方法以列表返回一個字典所有的鍵。keys()方法的語法:dict.keys()此語法中dict代表的是指定字典,該方法不需要參數(shù)。返回一個字典所有的鍵。示例如下:>>>student={'小萌':'000','小智':'001'}>>>all_keys=student.keys()>>>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)用。5.3.3values()方法values()方法以列表形式返回字典中的所有值。values()方法的語法:dict.values()dict代表指定字典,values()方法不需要參數(shù)。返回結(jié)果為字典中的所有值,所有值存放于一個列表中,與鍵的返回不同,值的返回結(jié)果中可以包含重復(fù)的元素。示例如下:>>>student={'小萌':'000','小智':'1002','小李':'002'}>>>all_values=student.values()>>>print(f'student字典所有值為:{all_values}')student字典所有值為:dict_values(['000','1002','002'])>>>print(f'student字典所有值為:{list(all_values)}')#values()得到元組數(shù)組,轉(zhuǎn)成list,便于觀看student字典所有值為:['000','1002','002']在實際項目應(yīng)用中,values()方法的使用也非常多,經(jīng)常會遇到需要將字典中的值轉(zhuǎn)化為列表做操作的應(yīng)用,并且一般會和keys()方法一起使用。5.3.4keyindict方法Python字典in操作符用于判斷鍵是否存在于字典中。該方法的語法:keyindict此語法中dict代表的是指定字典,key代表要在字典中查找的鍵。如果鍵在字典里返回true,否則返回false。示例如下:>>>student={'小萌':'000','小智':'001'}>>>xm_in_stu='小萌'instudent>>>print(f'小萌在student字典中:{xm_in_stu}')小萌在student字典中:True>>>xq_in_stu='小強(qiáng)'instudent>>>print(f'小強(qiáng)在student字典中:{xq_in_stu}')小強(qiáng)在student字典中:False在實際項目應(yīng)用中,keyindict方法應(yīng)用也比較多,一般多用于判斷某個鍵是否在字典中,以此來判定下一步的執(zhí)行計劃。5.3.5update()方法update()方法用于把一個字典A的鍵值對更新到另一個字典B里。update()方法的語法:dict.update(dict2)此語法中dict代表的是指定字典,dict2代表添加到指定字典dict里的字典。該方法沒有任何返回值。示例如下:>>>student={'小萌':'000','小智':'001'}>>>student2={'小李':'003'}>>>print(f'原student字典為:{student}')原student字典為:{'小萌':'000','小智':'001'}>>>student.update(student2)>>>print(f'新student字典為:{student}')新student字典為:{'小萌':'000','小智':'001','小李':'003'}在實際項目應(yīng)用中,update()方法的使用不是很多,一般用于將兩個字典合并。5.3.6clear()方法clear()方法用于刪除字典內(nèi)的所有元素。clear()方法的語法:dict.clear()此語法中,dict代表指定字典,該方法不需要參數(shù)。該函數(shù)是一個原地操作函數(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()方法清空一個字典,便于下一次遍歷使用。5.3.7copy()方法copy()方法用于返回一個具有相同鍵值對的新字典。copy()方法的語法:dict.copy()此語法中,dict代表指定字典,該方法不需要參數(shù)。該方法的返回結(jié)果為一個字典的淺復(fù)制(shallowcopy)。示例如下:>>>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ù)制給另一個變量。通過下面的示例介紹什么是淺復(fù)制。>>>student={'小智':'001','info':['小張','003','man']}>>>st=student.copy()>>>st['小智']='1005'>>>print(f'更改copy后的st為:{st}')更改copy后的st為:{'小智':'1005','info':['小張','003','man']}>>>print(f'原字符串為:{student}')原字符串為:{'小智':'001','info':['小張','003','man']}>>>st['info'].remove('man')>>>print(f'變量st中刪除man后,st變?yōu)椋簕st}')變量st中刪除man后,st變?yōu)椋簕'小智':'1005','info':['小張','003']}>>>print(f'刪除后student為:{student}')刪除后student為:{'小智':'001','info':['小張','003']}在實際項目應(yīng)用中,copy()方法的使用不多。當(dāng)然,在用到copy()可以實現(xiàn)的功能時,要毫不猶豫地使用copy()方法。5.3.8fromkeys()方法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':None,'sex':None}>>>info=dict.fromkeys(seq,10)>>>print(f'新的字典為:{info}')新的字典為:{'name':10,'age':10,'sex':10}在實際項目應(yīng)用中,fromkeys()方法的使用不多,更多地用于初始化一個新字典。5.3.9items()方法items()方法以列表返回可遍歷的(鍵,值)元組數(shù)組。items()方法的語法:dict.items()dict代表指定字典,該方法不需要參數(shù)。返回結(jié)果為可遍歷的(鍵/值)元組數(shù)組。示例如下:>>>student={'小萌':'000','小智':'001'}>>>print(f'調(diào)用items方法的結(jié)果:{student.items()}')調(diào)用items方法的結(jié)果:dict_items([('小萌','000'),('小智','001')])在Python2.x中提供了一個iteritems()方法,iteritems()方法和items()方法的作用大致相同,但是iteritems()方法返回的是一個迭代器對象,而不是列表。在Python3.x中沒有iteritems()方法。在實際項目應(yīng)用中,items()方法使用得不多。5.3.10setdefault()方法setdefault()方法和get()方法類似,用于獲得與給定鍵相關(guān)聯(lián)的值。setdefault()方法的語法:dict.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(f'student字典新值為:{student}')student字典新值為:{'小萌':'000','小智':'001','小強(qiáng)':None}在實際項目應(yīng)用中,setdefault()方法的使用不多。5.4集合前面介紹了Python中的字典,Python中的字典是對數(shù)學(xué)中映射概念支持的直接體現(xiàn)。接下來將講解一個和字典非常相似的對象:集合。示例如下:>>>student={}>>>print(f'student對象的類型為:{type(student)}')student對象的類型為:<class'dict'>>>>number={1,2,3}>>>print(f'number對象的類型為:{type(number)}')number對象的類型為:<class'set'>這里出現(xiàn)了一個新的類型set。在Python中,用花括號括起一些元素,元素之間直接用逗號分隔,這就是集合。集合在Python中的特性可以概括為兩個字:唯一。示例如下:>>>numbers={1,2,3,4,5,3,2,1,6}>>>numbers{1,2,3,4,5,6}set集合中輸出的結(jié)果自動將重復(fù)數(shù)據(jù)清除了。集合是無序的,不能通過索引下標(biāo)的方式從集合中取得某個元素。例如:>>>numbers={1,2,3,4,5}>>>numbers[2]Traceback(mostrecentcalllast):File"<pyshell#143>",line1,in<module>numbers[2]TypeError:'set'objectdoesnotsupportindexing5.4.1創(chuàng)建集合創(chuàng)建集合有兩種方法:一種是直接把元素用花括號({})括起來,花括號中的元素之間用英文模式下的逗號(,)分隔;另一種是用set(obj)方法定義,obj為一個元素、一個列表或元組。例如:>>>numbers={1,2,3,4,5}>>>print(f'numbers變量的類型為:{type(numbers)}')numbers變量的類型為:<class'set'>>>>numbers{1,2,3,4,5}>>>name=set('abc')#一個元素,仔細(xì)觀察輸出結(jié)果>>>name
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第2課 春秋戰(zhàn)國時期的社會變革與思想文化說課稿-2023-2024學(xué)年中職歷史中國歷史高教版
- 2025年中國個人護(hù)理用聚季銨鹽行業(yè)市場分析及投資價值評估前景預(yù)測報告
- 第三單元寫作《寫人要抓住特點(diǎn)》說課稿 統(tǒng)編版語文七年級上冊
- 2025年新能源汽車輕量化車身材料創(chuàng)新與碰撞安全報告
- 成人教育終身學(xué)習(xí)體系構(gòu)建與平臺運(yùn)營報告:2025年成人教育平臺運(yùn)營的社區(qū)化發(fā)展策略
- 物流行業(yè)智能化變革:2025年自動駕駛卡車在電商物流中的應(yīng)用前景研究
- 第12課《盤古開天地》教學(xué)設(shè)計-四年級上冊語文統(tǒng)編版
- 2025年工業(yè)互聯(lián)網(wǎng)平臺安全多方計算技術(shù)在智慧家居安全中的應(yīng)用報告
- 第15課 明朝的對外關(guān)系(說課稿)七年級歷史下冊同步備課系列(部編版)
- 人教七年級下學(xué)期地理教學(xué)設(shè)計第十章《極地地區(qū)》
- 2025年安徽蕭縣縣直事業(yè)單位招聘115人筆試備考題庫附答案詳解
- 風(fēng)險分級管控和隱患排查治理體系培訓(xùn)考試試題(附答案)
- 網(wǎng)絡(luò)安全宣傳周網(wǎng)絡(luò)安全知識競答考試題及答案
- 司法局社區(qū)矯正工作匯報
- 新質(zhì)生產(chǎn)力區(qū)域經(jīng)濟(jì)發(fā)展
- 質(zhì)量信得過班組知識培訓(xùn)課件
- 手術(shù)部(室)醫(yī)院感染控制標(biāo)準(zhǔn)WST855-2025解讀課件
- 2026年高考數(shù)學(xué)一輪復(fù)習(xí)三維設(shè)計創(chuàng)新-微拓展 圓錐曲線中的二級結(jié)論
- 2025中央八項規(guī)定精神學(xué)習(xí)教育知識測試競賽試卷題庫及答案
- 醫(yī)學(xué)研究生中期研究進(jìn)展匯報
- 軟件系統(tǒng)運(yùn)維操作手冊
評論
0/150
提交評論