python核心编程第二版课后题答案第七章.docx
文本预览下载声明
def orderdict(mydict):??? 7-3(a)创建一个字典,并把字典中的键按照字母顺序显示出来??? # 题目说了只要把键按照字母顺序显示出来,并没有说要把值也显示出来??? print sorted(mydict)def orderdict2(mydict):??? 7-3(b) 现在根据排好的键,显示出这个字典的键和值??? keys = sorted(mydict)??? for i in keys:??????? print %s:%s %(i,mydict[i]),def orderdict3(mydict):??? 7-3(c) 这次按照值排序输出??? # 这里我们采用了 sorted的 key技巧??? for k,v in sorted(mydict.items(),key=lambda x:x[1]):??????? print %s:%s %(k,v),def mergedict(list1,list2):??? 7-4 给定两个长度相同的列表,建立一个字典??? 例如 [1,2,3,4,5] [a,b,c,d] 生成 [1:a,2:b,3:c,4:d]??? r = {}??? lens = len(list1)??? for i in xrange(lens):??????? r.setdefault(list1[i],list2[i])??? return r# 7.5在单独的文件里# 7.6在单独的文件里def changedict(mydict):??? 7.7 将输入的字典的键和值互换??? 示例:??? mydict = {1:a,2:b}??? changedict(mydict)??? print mydict??? ??? # 这里假设输入的值都是可以作为字典的键的,并且要注意,值不能有重复,否则会产生数据丢失??? # 考虑,是直接修改引用,还是不修改引用返回值???? # 产生同值怎么办???? # 如果是返回值,那么这道题目太简单了,所以我这里使用返回引用??? # 返回引用的话就是修改引用??? # 如果使用引用就不能使用 items 迭代,因为在循环items的时候,你是无法修改键的??? # 所以我这里使用了 keys??? for i in mydict.keys():??????? temp = mydict[i]??????? del mydict[i]??????? mydict[temp] = idef hr():??? 7.8 输入雇员和编号,对雇员进行排序输出,对编号进行排序输出??? db ={}??? # uid是不能重复的,但是名字是有可能重复的,所以我这里不打算用键值互换法??? while True:??????? employee = raw_input(请输入雇员名[输入q退出]:)??????? if employee==q:break??????? employee.decode(gbk)??????? while True:??????????? uid????? = int(raw_input(请输入编号:))??????????? if uid in db:??????????????? print 编号已经存在!??????????????? continue??????????? break??????? db[uid] = employee??? while True:??????? order = raw_input(你想按名字(N)还是按编号(I)排序(N/I/Q退出):).lower()[0]??????? if order not in niq:??????????? print 输入的指令错误!??????????? continue??????? if order == q:??????????? break??????? if order == n:??????????? # 知识点,这里用到了 sorted中的key参数??????????? # key 返回一个 lambda ,所谓 lambdabda就是一个小函数,??????????? # 类似匿名函数??????????? #???????????? #?? def (x):??????????? #?????? return x[1]??????????? #??????????? # 那么x又是什么呢?x就是db.items 返回的第一项,x[0] 就是字典的键,x[1]就是字典的值??????????? # 所以表示按照 db.items()中字典的值部分排序??????????? # 此外 sorted里还有一个是 cmp,c
显示全部