0.當你聽到小伙伴們在談論“映射”、“哈希”、“散列”或者“關系數組”的時候,事實上他們就是在討論什么呢?
me:字典
參考答案:是的,事實上他們就是在討論我們這一講介紹的“字典”,都是一個概念!(切記,裝X的本質就是把同一個東西說成各種不同的事物~)
1.嘗試一下將數據('F': 70, 'C': 67, 'h': 104, 'i': 105, 's': 115)創建為一個字典並訪問鍵 'C' 對應的值?
me:
dict1={'F': 70, 'C': 67, 'h': 104, 'i': 105, 's': 115}
print(dict1["C"])
參考答案:
>>> MyDict = dict((('F', 70), ('i',105), ('s',115), ('h',104), ('C',67))) >>> MyDict_2 = {'F':70, 'i':105, 's':115, 'h':104, 'C':67} >>> type(MyDict) <class 'dict'> >>> type(MyDict_2) <class 'dict'> >>> MyDict['C'] 67
2. 用方括號(“[]”)括起來的數據我們叫列表,那么使用大括號(“{}”)括起來的數據我們就叫字典,對嗎?
me:不對,只是列表的表達形式是用[]將數據括起來,字典的表達形式是使用{}將數據括起來,但是使用{}括起來的數據並不能表示為字典
參考答案:
>>> NotADict = {1, 2, 3, 4, 5}
>>> type(NotADict)
<class 'set'>
不難發現,雖然我們用大括號(“{}”)把一些數據括起來了,但由於沒有反映出這些數據有映射的關系,所以創建出來的不是字典,而是叫’set’的東西,那’set’到底又是啥玩意兒呢?請看第027講 | 集合:在我的世界里,你就是唯一!
3.你如何理解有些東西字典做得到,但“萬能的”列表卻難以實現(臣妾做不到T_T)?
me:
參考答案:
>>> brand = ['李寧', '耐克', '阿迪達斯', '魚C工作室'] >>> slogan = ['一切皆有可能', 'Just do it', 'Impossible is nothing', '讓編程改變世界'] >>> print('魚C工作室的口號是:', slogan[brand.index('魚C工作室')]) 魚C工作室的口號是: 讓編程改變世界
列表brand、slogan的索引和相對的值是沒有任何關系的,我們可以看出唯一有聯系的就是兩個列表間,索引號相同的元素是有關系的(品牌對應口號嘛),所以這里我們通過brand.index('魚C工作室')這樣的語句,間接的實現通過品牌查找對應的口號的功能。
這確實是一種可實現方法,呃……但用起來呢,多少有些別扭,效率還不高咧。況且Python是以簡潔為主,這樣子的實現肯定是不能讓人滿意的,所以呢,我們需要有字典這種映射類型的出現:
>>> dict1 = {'李寧':'一切皆有可能', '耐克':'Just do it', '阿迪達斯':'Impossible is nothing', '魚C工作室':'讓編程改變世界'}
>>> print('魚C工作室的口號是:', dict1['魚C工作室'])
魚C工作室的口號是: 讓編程改變世界
4. 下邊這些代碼,他們都在執行一樣的操作嗎?你看得出差別嗎?
a = dict(one=1, two=2, three=3) b = {'one': 1, 'two': 2, 'three': 3} c = dict(zip(['one', 'two', 'three'], [1, 2, 3])) d = dict([('two', 2), ('one', 1), ('three', 3)]) e = dict({'three': 3, 'one': 1, 'two': 2})
me:
參考答案:是的,他們都在創建字典:a = dict(one=1, two=2, three=3),呃,我是看不出差別啦~
5.如圖,你可以推測出打了馬賽克部分的代碼嗎?

me:
date="100,小甲魚,男" MyDict={} (MyDict["id"],MyDict["name"],MyDict["sex"])=date.split(",",3) print("ID: " + MyDict["id"]) print("name: " + MyDict["name"]) print("sex: " +MyDict["sex"])
參考答案:
動手:
data = "1000,小甲魚,男" MyDict = {} # 還記得字符串的分割方法吧,別學過就忘啦^_^ (MyDict['id'], MyDict['name'], MyDict['sex']) = data.split(',') print("ID: " + MyDict['id']) print("Name: " + MyDict['name']) print("Sex " + MyDict['sex'])
0.嘗試利用字典的特性編寫一個通訊錄程序吧,功能如圖:

me:
print(""" |---歡迎進入通訊錄程序---| |---1:查詢聯系人資料 ---| |---2:插入新的聯系人 ---| |---3:刪除已有聯系人 ---| |---4:退出通訊錄程序 ---| """) dictTX=dict() while 1: InputY = int(input("請輸入相關的指令代碼:")) if InputY == 1: name = input("請輸入聯系人姓名:") print(name + ":" + dictTX[name]) elif InputY == 2 : name = input("請輸入聯系人姓名:") if name in dictTX: print("您輸入的姓名已經在通訊錄中 -->> ",name," : ",dictTX[name]) temp = input("是否需要修改用戶資料(YES/NO):") if temp == "YES": namder = input("請輸入用戶聯系電話:") dictTX[name] = namder else: namder = input("請輸入用戶聯系電話:") dictTX[name] = namder elif InputY == 3: name=input("請輸入聯系人姓名:") if name in dictTX: del dictTX[name] else: print(name,"不在通訊錄中;") elif InputY == 4: print("|--- 感謝使用通訊錄程序 ---|") break
參考答案:
print('|--- 歡迎進入通訊錄程序 ---|') print('|--- 1:查詢聯系人資料 ---|') print('|--- 2:插入新的聯系人 ---|') print('|--- 3:刪除已有聯系人 ---|') print('|--- 4:退出通訊錄程序 ---|') contacts = dict() while 1: instr = int(input('\n請輸入相關的指令代碼:')) if instr == 1: name = input('請輸入聯系人姓名:') if name in contacts: print(name + ' : ' + contacts[name]) else: print('您輸入的姓名不再通訊錄中!') if instr == 2: name = input('請輸入聯系人姓名:') if name in contacts: print('您輸入的姓名在通訊錄中已存在 -->> ', end='') print(name + ' : ' + contacts[name]) if input('是否修改用戶資料(YES/NO):') == 'YES': contacts[name] = input('請輸入用戶聯系電話:') else: contacts[name] = input('請輸入用戶聯系電話:') if instr == 3: name = input('請輸入聯系人姓名:') if name in contacts: del(contacts[name]) # 也可以使用dict.pop() else: print('您輸入的聯系人不存在。') if instr == 4: break print('|--- 感謝使用通訊錄程序 ---|')
