1. 結(jié)構(gòu)嚴(yán)謹(jǐn)、內(nèi)容翔實(shí),2. 以項(xiàng)目為驅(qū)動(dòng),以模板形式介紹項(xiàng)目開發(fā)過程,3. 理論聯(lián)系實(shí)際項(xiàng)目,既適合初學(xué)者夯實(shí)基礎(chǔ),又能幫助Python程序員提升技能。4. 既可作為各類大中專學(xué)校的教材,也可以作為程序員自學(xué)用書。
第5章映射和集合類型本章學(xué)習(xí)目標(biāo) 掌握字典的創(chuàng)建、訪問、更新 熟悉字典的常用內(nèi)置函數(shù) 掌握集合的創(chuàng)建、訪問、更新 熟悉集合的常用內(nèi)置函數(shù)
在前面的章節(jié)中已經(jīng)介紹了整型、浮點(diǎn)型、字符串、列表等數(shù)據(jù)類型。本章將介紹另外兩種數(shù)據(jù)類型: 映射(字典)和集合類型。5.1映射類型——字典字典是Python語言中唯一的映射類型。這種映射類型由鍵(key)和值(value)組成(統(tǒng)稱為“鍵值對(duì)”),一個(gè)鍵只能對(duì)應(yīng)一個(gè)值,但多個(gè)鍵可以對(duì)應(yīng)相同的值。字典對(duì)象是可變的數(shù)據(jù)類型,可以存儲(chǔ)任意個(gè)鍵值對(duì)。字典中的值沒有特定順序,每個(gè)值都對(duì)應(yīng)一個(gè)唯一的鍵,字典也被稱作關(guān)聯(lián)數(shù)組或哈希表。字典類型和序列類型的區(qū)別在于其存儲(chǔ)和訪問數(shù)據(jù)方式的不同。序列類型只用整型作為其索引,或者說只用整型作為其鍵。映射類型則可以用其他對(duì)象類型作為鍵。并且映射類型的鍵和其指向的值有一定的關(guān)聯(lián)性,而序列類型則沒有。正是由于映射類型的鍵可以“映射”到值,所以才稱其為映射類型。注意: 字典的鍵必須是可哈希的對(duì)象,如字符串、整型、元組(元素不包含可變數(shù)據(jù)類型)都是可哈希的對(duì)象,都可以作為字典的鍵,而列表、字典是不可哈希的對(duì)象,所以不能用作字典的鍵?梢院唵蔚匕阎苯踊蜷g接不包含可變數(shù)據(jù)類型的對(duì)象看作可哈希的對(duì)象,當(dāng)然,最妥當(dāng)?shù)姆椒ㄟ是通過hash()函數(shù)來判斷某個(gè)對(duì)象是否是可哈希的對(duì)象。5.1.1創(chuàng)建字典字典由一系列的“鍵值對(duì)”組成,可以通過使用花括號(hào),并把花括號(hào)里的每一個(gè)鍵值對(duì)采用逗號(hào)進(jìn)行分隔,鍵值對(duì)中間用冒號(hào)隔開的方式來創(chuàng)建一個(gè)字典。創(chuàng)建字典的一般格式如下: dictionary_name={key1:value1,key2:value2,...,keyN:valueN}其中,key1、key2、keyN等表示字典的鍵,value1、value2、valueN表示字典的鍵對(duì)應(yīng)的值。此外,還可以通過內(nèi)建函數(shù)dict()方法和fromkeys()方法創(chuàng)建一個(gè)字典。dict()函數(shù)可以接收以(key,value)形式的列表或元組。使用fromkeys()函數(shù)可以創(chuàng)建一個(gè)“默認(rèn)”字典,字典中鍵對(duì)應(yīng)的值都相同,如果沒有指定值,默認(rèn)為None。# 例51創(chuàng)建字典# 1. 通過普通方式來創(chuàng)建字典# 字典的鍵為數(shù)字,值為字符串>>>student1_dict={1001:"xiaowang",1002:"xiaoli",1003:"xiaochen"}# 字典的鍵為字符串,值也為字符串>>>student2_dict={"1001":"xiaowang","1002":"xiaoli","1003":"xiaochen"}>>>student1_dict{1001:"xiaowang",1002:"xiaoli",1003:"xiaochen"}>>>student2_dict{'1003': 'xiaochen', '1002': 'xiaoli', '1001': 'xiaowang'}
# 2. 通過內(nèi)建函數(shù)dict()來創(chuàng)建字典# 以(key,value)形式的列表>>>student3_dict=dict(\[(1001,"xiaowang"),(1002,"xiaoli"),(1003,"xiaochen")\])# 以(key,value)形式的元組>>>student4_dict=dict(((1001,"xiaowang"),(1002,"xiaoli"),(1003,"xiaochen")))>>>student3_dict{1001:"xiaowang",1002:"xiaoli",1003:"xiaochen"}>>>student4_dict{1001:"xiaowang",1002:"xiaoli",1003:"xiaochen"}
# 3. 通過內(nèi)建函數(shù)fromkeys()來創(chuàng)建字典# 指定value值為"person">>>student5_dict={}.fromkeys((1001,1002,1003),"person")# 不指定value值>>>student6_dict={}.fromkeys((1001,1002,1003))>>>student5_dict{1001:"person",1002:"person",1003:"person"}>>>student6_dict{1001:None,1002:None,1003:None}[1]Python程序設(shè)計(jì)教程第5章映射和集合類型[3][3]這個(gè)例子,先通過普通的方式創(chuàng)建了一個(gè)含有三個(gè)鍵值對(duì)的字典“student1_dict”。鍵為學(xué)生編號(hào),類型為整型,值為編號(hào)對(duì)應(yīng)的學(xué)生。接著又創(chuàng)建了字典“student2_dict”,該字典的編號(hào)類型為字符串,輸出時(shí),可以發(fā)現(xiàn)輸出的結(jié)果和所創(chuàng)建時(shí)給出的鍵值對(duì)順序不一致。這是因?yàn)閯?chuàng)建時(shí)給出的鍵值對(duì)順序并不是字典的實(shí)際存儲(chǔ)順序,字典是根據(jù)每個(gè)鍵值對(duì)的鍵的hashcode值進(jìn)行排序存儲(chǔ)的。然后通過內(nèi)建函數(shù)dict(),分別以列表和元組的參數(shù)形式創(chuàng)建字典,最后再通過fromkeys()函數(shù)創(chuàng)建兩個(gè)字典?梢钥吹,當(dāng)指定value為“person”時(shí),其鍵值對(duì)中的值都是“person”,當(dāng)沒指定value時(shí),其鍵值對(duì)中的值都使用默認(rèn)值“None”。5.1.2訪問字典訪問字典中鍵值對(duì)的值可以通過方括號(hào)并指定相應(yīng)的鍵的形式訪問。需要注意的是,當(dāng)指定一個(gè)字典中不存在的鍵時(shí)就會(huì)拋KeyError異常。遍歷一個(gè)字典可以有以下幾種方式: (1) 通過指定鍵的方式遍歷字典。在Python 2.2以前,需要使用keys()函數(shù)獲取字典的所有鍵。而在Python 2.2以后,可以直接遍歷字典這個(gè)迭代器對(duì)象,每次返回的是字典的鍵,因此,可以通過dictionary_name\[key\]的方式訪問對(duì)應(yīng)的值,從而可以遍歷字典中所有的鍵值對(duì)。(2) 通過內(nèi)建函數(shù)items()遍歷字典。該函數(shù)返回的是一個(gè)由鍵值對(duì)組成的元組的列表。因此,可以遍歷這個(gè)列表,從而遍歷字典中所有的鍵值對(duì)。(3) 通過內(nèi)建函數(shù)iteritems()遍歷字典。該函數(shù)返回的是鍵值對(duì)的迭代器。因此,可以直接得到這個(gè)鍵值對(duì),從而遍歷字典中所有的鍵值對(duì)。#coding:utf-8# 例52遍歷字典# 定義含有三個(gè)鍵值對(duì)的字典student_dict={1001:"xiaowang",1002:"xiaoli",1003:"xiaochen"}# 1.1. 通過指定鍵的方式遍歷字典(Python 2.2版本之前) print "循環(huán)遍歷student_dict.keys():",student_dict.keys()for key in student_dict.keys():print 'student_dict\[%s\]=' % key,student_dict\[key\]
# 1.2. 通過指定鍵的方式遍歷字典(Python 2.2版本之后)print "循環(huán)遍歷student_dict:",student_dictfor key in student_dict:print 'student_dict\[%s\]=' % key,student_dict\[key\]
# 2. 通過內(nèi)建函數(shù)items()遍歷字典print "循環(huán)遍歷student_dict.items():",student_dict.items()for (key,value) in student_dict.items():print 'student_dict\[%s\]=' % key,value
# 3. 通過內(nèi)建函數(shù)iteritems()遍歷字典print "循環(huán)遍歷student_dict.iteritems():",student_dict.iteritems()for (key,value) in student_dict.iteritems():print 'student_dict\[%s\]=' % key,value程序的運(yùn)行結(jié)果如下: 循環(huán)遍歷student_dict.keys(): \[1001, 1002, 1003\]student_dict\[1001\]=xiaowangstudent_dict\[1002\]=xiaolistudent_dict\[1003\]=xiaochen循環(huán)遍歷student_dict: {1001: 'xiaowang', 1002: 'xiaoli', 1003: 'xiaochen'}student_dict\[1001\]=xiaowangstudent_dict\[1002\]=xiaolistudent_dict\[1003\]=xiaochen循環(huán)遍歷student_dict.items(): \[(1001, 'xiaowang'), (1002, 'xiaoli'), (1003, 'xiaochen')\]student_dict\[1001\]=xiaowangstudent_dict\[1002\]=xiaolistudent_dict\[1003\]=xiaochen循環(huán)遍歷student_dict.iteritems():student_dict\[1001\]=xiaowangstudent_dict\[1002\]=xiaolistudent_dict\[1003\]=xiaochen這個(gè)程序首先定義了含有三個(gè)鍵值對(duì)(學(xué)生編號(hào)和對(duì)應(yīng)的學(xué)生)的字典,然后三種方式遍歷整個(gè)字典。第一種是通過指定鍵的方式遍歷字典,這種方式又分兩種情況: 在Python版本2.2以前,可以通過key()函數(shù)獲得字典的所有鍵組成的列表。如程序中輸出student_dict.keys()就輸出了\[1001, 1002, 1003\];另一種情況是在Python 2.2版本以后,可以直接遍歷字典對(duì)象,每次返回的是字典中的鍵。因此,這兩種情況都可以通過student_dict\[key\]的方式獲取key鍵對(duì)應(yīng)的值,從而遍歷這個(gè)字典。第二種是通過內(nèi)建函數(shù)items()遍歷字典。這個(gè)函數(shù)返回的是一個(gè)由鍵值對(duì)組成的元組的列表,如輸出student_dict.keys()就輸出了\[(1001, 'xiaowang'), (1002, 'xiaoli'), (1003, 'xiaochen')\]。因此,遍歷這個(gè)列表就相當(dāng)于遍歷了字典。第三種是通過內(nèi)建函數(shù)iteritems()遍歷字典,這個(gè)函數(shù)返回的是一個(gè)鍵值對(duì)的迭代器,如輸出student_dict.keys()就輸出了。因此,遍歷這個(gè)列表就相當(dāng)于遍歷了字典。5.1.3更新字典字典是可變數(shù)據(jù)類型,即字典的長度和元素都是可以改變的。下面將介紹更新字典的方式: 添加元素、修改元素和刪除元素。說明: 本節(jié)講的元素指定是鍵值對(duì)。1. 添加元素向字典添加一個(gè)元素可以通過賦值語句實(shí)現(xiàn),該賦值語句的寫法如下: dictionary_name\[key\]=value如果key在字典dictionary_name中不存在,則直接將元素(key,value)添加到字典中;如果key已存在,則value會(huì)覆蓋原來字典中key對(duì)應(yīng)的值,從而修改了字典中key對(duì)應(yīng)的值(這種方式實(shí)現(xiàn)了修改元素的目的)。這種情況也相當(dāng)于把元素(key,value)添加到字典中,但同時(shí)也刪除了原來字典中含key的元素,字典的元素個(gè)數(shù)沒有增加。#coding:utf-8# 例53使用賦值語句向字典添加一個(gè)元素# 定義一個(gè)含有三個(gè)元素(學(xué)生編號(hào):學(xué)生)的字典student_dict={1001:"xiaowang",1002:"xiaoli",1003:"xiaochen"}# 使用len()函數(shù)獲取student_dict字典中初始的個(gè)數(shù),str()將整型轉(zhuǎn)為字符串類型print '目前有' str(len(student_dict)) '個(gè)學(xué)生'print '剛來了一個(gè)學(xué)生"xiaozhang",給他分配的學(xué)生編號(hào)為1004'# 使用賦值語句向student_dict字典添加一個(gè)(1004,"xiaozhang")的元素student_dict\[1004\]="xiaozhang"# 再次輸出此時(shí)student_dict字典的長度print '現(xiàn)在有' str(len(student_dict)) '個(gè)學(xué)生,他們分別是:'# 使用for循環(huán)遍歷這個(gè)student_dict字典,分別輸出這些元素for key in student_dict:print 'student_dict\[%s\]=' % key,student_dict\[key\]print '又來了一個(gè)學(xué)生"xiaoshui",給該學(xué)生分配一個(gè)該班里(字典)已用過的學(xué)生編號(hào)1004'# 使用賦值語句向student_dict字典添加一個(gè)(1004,"xiaoshui")的元素student_dict\[1004\]="xiaoshui"# 再次輸出此時(shí)student_dict字典的長度print '現(xiàn)在有' str(len(student_dict)) '個(gè)學(xué)生,他們分別是:'# 使用for循環(huán)遍歷這個(gè)student_dict字典,分別輸出這些元素for key in student_dict:print 'student_dict\[%s\]=' % key,student_dict\[key\]程序運(yùn)行結(jié)果如下: 目前有三個(gè)學(xué)生剛來了一個(gè)學(xué)生"xiaozhang",給他分配的學(xué)生編號(hào)為1004現(xiàn)在有4個(gè)學(xué)生,他們分別是:student_dict\[1001\]=xiaowangstudent_dict\[1002\]=xiaolistudent_dict\[1003\]=xiaochenstudent_dict\[1004\]=xiaozhang又來了一個(gè)學(xué)生"xiaoshui",給該學(xué)生分配一個(gè)該班里(字典)已用過的學(xué)生編號(hào)1004現(xiàn)在有4個(gè)學(xué)生,他們分別是:student_dict\[1001\]=xiaowangstudent_dict\[1002\]=xiaolistudent_dict\[1003\]=xiaochenstudent_dict\[1004\]=xiaoshui從程序運(yùn)行結(jié)果可以看到,第一次使用賦值語句向字典添加元素(1004: "xiaozhang")后,遍歷此時(shí)的字典,可以看到元素(1004: "xiaozhang")已被添加到字典中。第二次又使用賦值語句向字典添加元素(1004: "xiaoshui")后,遍歷此時(shí)的字典,可以看到原來的元素(1004: "xiaozhang")已被新元素(1004: "xiaoshui")替換;蛘哒f字典中鍵為"1004"對(duì)應(yīng)的value值已被修改成"xiaoshui"。字典的元素個(gè)數(shù)沒有增加。這是因?yàn)樘砑拥脑氐逆I在字典中已存在。此外,向字典中添加一個(gè)元素也可以通過setdefault()內(nèi)建函數(shù)實(shí)現(xiàn)。該函數(shù)的聲明如下: dictionary_name.setdefault(key\[,default_value\])其中,dictionary_name為字典名,參數(shù)key表示字典的鍵,參數(shù)default_value表示添加的字典元素默認(rèn)的值。該參數(shù)為可選參數(shù)。如果不指定該參數(shù)的值,默認(rèn)為None。如果要添加的參數(shù)key在字典中已存在,那么該函數(shù)將返回原有的值。否則這個(gè)元素將被添加到字典中,并返回所添加元素的value值。下面通過一個(gè)例子來說明如何使用setdefault()函數(shù)向字典添加一個(gè)元素。#coding:utf-8# 例54使用setdefault()函數(shù)向字典添加一個(gè)元素# 定義一個(gè)含有三個(gè)元素(學(xué)生編號(hào):學(xué)生)的字典student_dict={1001:"xiaowang",1002:"xiaoli",1003:"xiaochen"}# 使用len()函數(shù)獲取student_dict字典中初始的個(gè)數(shù),str()將整型轉(zhuǎn)為字符串類型print '目前有' str(len(student_dict)) '個(gè)學(xué)生'print '剛來了一個(gè)學(xué)生"xiaozhang",給他分配的學(xué)生編號(hào)為1004'# 使用setdefault()函數(shù)向student_dict字典添加一個(gè)(1004,"xiaozhang")的元素,并輸# 出該函數(shù)的返回值print student_dict.setdefault(1004,"xiaozhang")# 再次輸出此時(shí)student_dict字典的長度print '現(xiàn)在有' str(len(student_dict)) '個(gè)學(xué)生,他們分別是:'# 使用for循環(huán)遍歷這個(gè)student_dict字典,分別輸出這些元素for key in student_dict:print 'student_dict\[%s\]=' % key,student_dict\[key\]print '又來了一個(gè)學(xué)生"xiaoshui",給該學(xué)生分配一個(gè)該班里(字典)已用過的學(xué)生編號(hào)1004'# 使用setdefault()函數(shù)向student_dict字典添加一個(gè)(1004,"xiaoshui")的元素,并輸出# 該函數(shù)的返回值print student_dict.setdefault(1004,"xiaoshui")# 再次輸出此時(shí)student_dict字典的長度print '現(xiàn)在有' str(len(student_dict)) '個(gè)學(xué)生,他們分別是:'# 使用for循環(huán)遍歷這個(gè)student_dict字典,分別輸出這些元素for key in student_dict:print 'student_dict\[%s\]=' % key,student_dict\[key\]該程序運(yùn)行的結(jié)果如下: 目前有三個(gè)學(xué)生剛來了一個(gè)學(xué)生"xiaozhang",給他分配的學(xué)生編號(hào)為1004xiaozhang現(xiàn)在有4個(gè)學(xué)生,他們分別是:student_dict\[1001\]=xiaowangstudent_dict\[1002\]=xiaolistudent_dict\[1003\]=xiaochenstudent_dict\[1004\]=xiaozhang又來了一個(gè)學(xué)生"xiaoshui",給該學(xué)生分配一個(gè)該班里(字典)已用過的學(xué)生編號(hào)1004xiaozhang現(xiàn)在有4個(gè)學(xué)生,他們分別是:student_dict\[1001\]=xiaowangstudent_dict\[1002\]=xiaolistudent_dict\[1003\]=xiaochenstudent_dict\[1004\]=xiaozhang從程序運(yùn)行結(jié)果可以看到,第一次使用setdefault()函數(shù)向字典添加元素(1004: "xiaozhang")時(shí),函數(shù)返回了"xiaozhang",說明元素添加成功。遍歷此時(shí)的字典,可以看到元素(1004: "xiaozhang")確實(shí)已被添加到字典中。第二次又使用setdefault()函數(shù)向字典添加元素(1004: "xiaoshui")時(shí),函數(shù)返回了"xiaozhang",說明元素添加失敗。遍歷此時(shí)的字典,可以看到元素(1004: "xiaoshui")確實(shí)沒有被添加到字典中。這是因?yàn)樘砑拥脑氐逆I在字典中已存在。2. 修改元素修改字典中的元素是通過賦值語句實(shí)現(xiàn)的,這在添加元素里面有提到。在賦值時(shí)指定的key值在字典中要存在。#coding:utf-8# 例55修改字典# 定義一個(gè)含有3個(gè)元素(學(xué)生編號(hào):學(xué)生)的字典student_dict={1001:"xiaowang",1002:"xiaoli",1003:"xiaochen"}# 輸出初始化student_dict的字典print '初始化的字典為:',student_dict# 使用賦值語句student_dict字典中key為1001對(duì)應(yīng)的值改為"xiaochen",還有key為#1003對(duì)應(yīng)的值改為"xiaowang",student_dict\[1001\]="xiaochen"student_dict\[1003\]="xiaowang"# 輸出修改后student_dict的字典print '修改后的字典為:',student_dict該程序運(yùn)行的結(jié)果如下: 初始化的字典為: {1001: 'xiaowang', 1002: 'xiaoli', 1003: 'xiaochen'}修改后的字典為: {1001: 'xiaochen', 1002: 'xiaoli', 1003: 'xiaowang'}3. 刪除元素刪除字典中的元素可以通過del()函數(shù)、pop()函數(shù)或del語句實(shí)現(xiàn),下面將分別介紹這幾種方式。(1) 通過del()函數(shù)刪除字典中的元素 該函數(shù)的語法格式如下: del(dictionary_name\[key\])其中,key表示所要?jiǎng)h除的元素的鍵(key),且字典中存在這個(gè)鍵。(2) 通過pop()函數(shù)刪除字典中的元素 該函數(shù)的語法格式如下: dictionary_name.pop(key\[,default_value\])其中,key表示所要?jiǎng)h除的元素的鍵(key),如果字典中存在這個(gè)key,則函數(shù)返回key所對(duì)應(yīng)的值,否則返回default_value。(3) 通過del語句刪除字典中的元素 該語句的語法格式如下: del dictionary_name\[key\]其中,key表示所要?jiǎng)h除的元素的鍵(key),del語句和del()函數(shù)在功能上都是一樣的,在形式上只是del語句沒有括號(hào)而已。注意: 使用del()函數(shù)或del語句刪除不存在的元素時(shí)會(huì)拋KeyError異常,而使用pop()函數(shù)則不會(huì)。下面通過一個(gè)例子來說明這三種刪除字典中元素的方式的用法。#coding:utf-8# 例56刪除字典中的元素# 定義一個(gè)含有三個(gè)元素(學(xué)生編號(hào):學(xué)生)的字典student_dict={1001:"xiaowang",1002:"xiaoli",1003:"xiaochen"}# 輸出初始化student_dict的字典print '初始化的字典為:',student_dict
# 1. 使用del()函數(shù)刪除字典中的鍵為1001的元素del(student_dict\[1001\])# 輸出此時(shí)的student_dict字典print '使用del()函數(shù)刪除字典中的鍵為1001的元素后的字典為:',student_dict
# 2.1. 使用pop()函數(shù)刪除字典中的鍵為1001的元素(不存在)print student_dict.pop(1001,"不存在鍵為1001的元素")# 2.2. 使用pop()函數(shù)刪除字典中的鍵為1002的元素(存在)print student_dict.pop(1002,"不存在鍵為1002的元素")# 輸出此時(shí)的student_dict字典print '使用pop()函數(shù)刪除字典中的鍵為1002的元素后的字典為:',student_dict
# 3. 使用del語句刪除字典中的鍵為1003的元素del student_dict\[1003\]# 輸出此時(shí)的student_dict字典print '使用del語句刪除字典中鍵為1003的元素后的字典為:',student_dict程序運(yùn)行結(jié)果如下: 初始化的字典為: {1001: 'xiaowang', 1002: 'xiaoli', 1003: 'xiaochen'}使用del()函數(shù)刪除字典中鍵為1001的元素后的字典為: {1002: 'xiaoli', 1003: 'xiaochen'}不存在鍵為1001的元素xiaoli使用pop()函數(shù)刪除字典中鍵為1002的元素后的字典為: {1003: 'xiaochen'}使用del語句刪除字典中鍵為1003的元素后的字典為: {}從程序運(yùn)行結(jié)果可以看到,第一次使用del()函數(shù)刪除字典中鍵為“1001”的元素后,此時(shí)的字典有兩個(gè)元素,分別為(1002,'xiaoli')和(1003,'xiaochen')。第二次使用pop()函數(shù)刪除字典中鍵為“1001”的元素,由于此元素在字典中已不存在,所以該函數(shù)返回默認(rèn)值“不存在鍵為1001的元素”。接下來再次使用pop()函數(shù)刪除字典中鍵為“1002”的元素。由于此元素在字典中存在,所有該函數(shù)返回1002對(duì)應(yīng)的值“xiaoli”。此時(shí)的字典只有一個(gè)元素(1003,'xiaochen')。最后使用del語句刪除字典中鍵為“1003”的元素,可以看到此時(shí)的字典已變成空字典{}。5.1.4字典操作符適合于字典的操作符只有兩個(gè),一個(gè)是鍵查找操作符(\[\]),這個(gè)操作符和序列類型中的單一元素切片操作符很相似。通過這個(gè)操作符,既可以獲取字典中指定的元素,也可以給字典中指定的元素賦值。這在前面的例子中已有所體現(xiàn)。另外一個(gè)操作符是成員關(guān)系操作符(in、not in),這個(gè)操作符和序列類型中成員關(guān)系操作符一樣。下面通過一個(gè)例子來理解這兩個(gè)操作符。#coding:utf-8# 例57字典操作符的使用# 定義一個(gè)含有三個(gè)元素(學(xué)生編號(hào):學(xué)生)的字典student_dict={1001:"xiaowang",1002:"xiaoli",1003:"xiaochen"}print '初始化的字典為:',student_dictop=input("請(qǐng)輸入對(duì)應(yīng)的數(shù)字選擇相應(yīng)的操作(0:刪除元素1:修改元素)")if op==0:key=input("請(qǐng)輸入要?jiǎng)h除的元素對(duì)應(yīng)的鍵(-1表示停止刪除):")while key!=-1:# 判斷所輸入的key在字典中是否存在if key in student_dict:# key在字典中存在,則刪除該元素del student_dict\[key\]print "刪除%s所對(duì)應(yīng)的元素后的字典為:" % key,student_dict# 若字典長度為零,則跳出循環(huán)if len(student_dict)==0:print "字典已為空,無法繼續(xù)刪除元素"breakelse:print "您輸入的key值(%s)在字典中不存在" % keykey=input("請(qǐng)輸入要?jiǎng)h除的元素對(duì)應(yīng)的鍵(-1表示停止刪除):")else:key=input("請(qǐng)輸入要修改的元素對(duì)應(yīng)的鍵(-1表示停止修改):")while key!=-1:# 判斷所輸入的key在字典中是否存在if key in student_dict:# key在字典中存在,則先輸入value值,再將value值賦給要修改的元素value=raw_input("請(qǐng)輸入要修改的值")student_dict\[key\]=valueprint "將%s賦給%s所對(duì)應(yīng)的元素后的字典為:" % (value,key),student_dictelse:print "您輸入的key值(%s)在字典中不存在" % keykey=input("請(qǐng)輸入要修改的元素對(duì)應(yīng)的鍵(-1表示停止修改):")若輸入1,程序的運(yùn)行結(jié)果如下(包括必要的輸入): 初始化的字典為: {1001: 'xiaowang', 1002: 'xiaoli', 1003: 'xiaochen'}請(qǐng)輸入對(duì)應(yīng)的數(shù)字選擇相應(yīng)的操作(0:刪除元素1:修改元素)1請(qǐng)輸入要修改的元素對(duì)應(yīng)的鍵(-1表示停止修改):1001請(qǐng)輸入要修改的值xiaochen將xiaochen賦給1001所對(duì)應(yīng)的元素后的字典為: {1001: 'xiaochen', 1002: 'xiaoli', 1003: 'xiaochen'}請(qǐng)輸入要修改的元素對(duì)應(yīng)的鍵(-1表示停止修改):1003請(qǐng)輸入要修改的值xiaowang將xiaowang賦給1003所對(duì)應(yīng)的元素后的字典為: {1001: 'xiaochen', 1002: 'xiaoli', 1003: 'xiaowang'}請(qǐng)輸入要修改的元素對(duì)應(yīng)的鍵(-1表示停止修改):1004您輸入的key值(1004)在字典中不存在請(qǐng)輸入要修改的元素對(duì)應(yīng)的鍵(-1表示停止修改):-1該程序先輸入1,表示要執(zhí)行修改操作。然后輸入要修改的元素對(duì)應(yīng)的鍵(key)1001,程序使用成員關(guān)系操作符(in)來判斷輸入的key在字典中是否存在,如果存在,輸入要修改的值“xiaochen”,再通過賦值語句修改元素的值,此時(shí)鍵“1001”對(duì)應(yīng)的值已變?yōu)椤皒iaochen”。依次輸入1003、“xiaowang”時(shí),鍵“1003”對(duì)應(yīng)的值則變?yōu)椤皒iaowang”。再次輸入要修改的元素對(duì)應(yīng)的鍵“1004”,由于該鍵在字典中不存在,所以輸出“您輸入的key值(1004)在字典中不存在”,然后再輸入-1來退出程序。若輸入0,程序的運(yùn)行結(jié)果如下(包括必要的輸入): 初始化的字典為: {1001: 'xiaowang', 1002: 'xiaoli', 1003: 'xiaochen'}請(qǐng)輸入對(duì)應(yīng)的數(shù)字選擇相應(yīng)的操作(0:刪除元素1:修改元素)0請(qǐng)輸入要?jiǎng)h除的元素對(duì)應(yīng)的鍵(-1表示停止刪除): 1001刪除1001所對(duì)應(yīng)的元素后的字典為: {1002: 'xiaoli', 1003: 'xiaochen'}請(qǐng)輸入要?jiǎng)h除的元素對(duì)應(yīng)的鍵(-1表示停止刪除):1001您輸入的key值(1001)在字典中不存在請(qǐng)輸入要?jiǎng)h除的元素對(duì)應(yīng)的鍵(-1表示停止刪除):1002