《Python核心編程》第二版第七章練習題答案 第一部分


7–1. 字典方法。哪個字典方法可以用來把兩個字典合並到一起?

解答:使用update方法

7–2. 字典的鍵。我們知道字典的值可以是任意的Python 對象,那字典的鍵又如何呢?請試
着將除數字和字符串以外的其他不同類型的對象作為字典的鍵,看一看,哪些類型可以,哪些不行?
對那些不能作字典的鍵的對象類型,你認為是什么原因呢?

 解答:試着用list類型作鍵值,報錯;tuple類型是可以的;字典類型報錯

         報錯全是 unhashable type,可見字典的鍵值必須是可哈希的,而列表和字典是可變的,所以不能哈希

7–3. 字典和列表的方法。
(a) 創建一個字典,並把這個字典中的鍵按照字母順序顯示出來。
(b) 現在根據已按照字母順序排序好的鍵,顯示出這個字典中的鍵和值。
(c)同(b),但這次是根據已按照字母順序排序好的字典的值,顯示出這個字典中的鍵和值。(注
意:對字典和哈希表來說,這樣做一般沒有什么實際意義,因為大多數訪問和排序(如果需要)都是
基於字典的鍵,這里只把它作為一個練習。)

解答:

#!/usr/bin/python #Filename:7-3.py
''' Created on 2012-8-1 @author: wanglei ''' dic1={'a':123,'b':456,'z':4,'d':955} keylist=dic1.keys() keylist.sort() print keylist #dic2=sorted(dic1.items())
print [(key,dic1[key]) for key in keylist] valuelist=dic1.values() valuelist.sort() #print valuelist
for value in valuelist: for key in dic1.keys(): if dic1[key]==value: print (key,value),

測試數據:

['a', 'b', 'd', 'z'] [('a', 123), ('b', 456), ('d', 955), ('z', 4)] [4, 123, 456, 955] ('z', 4) ('a', 123) ('b', 456) ('d', 955)

注意,字典本身是無序的,對它的排序沒有意義,對字典的排序,最終必然會轉化為對它的鍵或值組成的列表的排序

另外,還可以利用sorted(dic1.items())對列表進行排序(字典序)

 

 

7-4. 建立字典。給定兩個長度相同的列表,比如說,列表[1, 2, 3,...]和['abc', 'def',
'ghi',...],用這兩個列表里的所有數據組成一個字典,像這樣:{1:'abc', 2: 'def', 3: 'ghi',...}

解答:

 

#!/usr/bin/python #Filename:7-4.py
''' Created on 2012-8-1 @author: wanglei ''' list1=[1,2,3,4,5,6] list2={'aa','bb','cc','dd','ee','ff'} dic1=dict(zip(list1,list2)) print dic1

 

輸出:

{1: 'aa', 2: 'bb', 3: 'ee', 4: 'dd', 5: 'cc', 6: 'ff'}

直接使用內建函數zip()

 

7-7. 顛倒字典中的鍵和值。用一個字典做輸入,輸出另一個字典,用前者的鍵做值,前者的
值做鍵。

解答:

 

#!/usr/bin/python #Filename:7-7.py
''' Created on 2012-8-6 @author: wanglei '''
def reversedic(adic): newdic={} for key,value in adic.items(): newdic[value]=key for key,value in newdic.items(): print (key,value) adic={1:'abc',2:'def',3:'ooo'} reversedic(adic)

 

輸出:

('ooo', 3) ('abc', 1) ('def', 2)

 

7-8. 人力資源。創建一個簡單的雇員姓名和編號的程序。讓用戶輸入一組雇員姓名和編號。
你的程序可以提供按照姓名排序輸出的功能,雇員姓名顯示在前面,后面是對應的雇員編號。附加
題:添加一項功能,按照雇員編號的順序輸出數據。

 

 解答:

#!/usr/bin/python # -*- coding:utf-8 -*-  #Filename:7-8.py
''' Created on 2012-8-6 @author: wanglei '''
import re def HR(): employeedic={} input=raw_input('請輸入員工姓名和編號,以姓名:編號的方式,多個員工用逗號分隔: ') #inputlist=list((''.join(input.split(','))).split(':')) inputlist=re.split(r'[:,]',input) #利用正則表達式對字符串進行分割 #print inputlist
    for i in range(0,len(inputlist)-1,2): employeedic[inputlist[i]]=inputlist[i+1] print sorted(employeedic.items()) #對鍵進行字典序排序輸出 for value in sorted(employeedic.values()):#對值進行字典序排序輸出 for key in employeedic.keys(): if employeedic[key]==value: print (key,value), HR()

測試數據:

請輸入員工姓名和編號,以姓名:編號的方式,多個員工用逗號分隔: em1:009,em2:002,em3:003 [('em1', '009'), ('em2', '002'), ('em3', '003 ')] ('em2', '002') ('em3', '003 ') ('em1', '009')

string.split()方法也可以對字符串進行分割,但它只接受一個分隔符,若是要用多個分隔符分割一個字符串,可以使用正則表達式

re.split()方法

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM