在本篇博客中,你將能學習到能夠將相關信息關聯起來的Python字典,以及一些對字典的操作。
在講正事之前,不能忘了上一篇博客佈置下來的作業:
執行以下操作以創建一個程序,該程序模擬網站如何確保每個人都有唯一的用戶名。
•列出包含五個或更多用戶名的列表current_users;再列出包含五個新用戶名的列表new_users,
確保一個或兩個新用戶名也在當前用戶列表中。
•循環瀏覽新用戶列表,查看每個新用戶名是否已被使用。如果有,請打印一條消息,說明此人需要輸入新的用戶名。
如果沒有使用用戶名,請打印一條消息,說明用戶名可用。
•確保你的比較不區分大小寫。如果使用了“john”,則不應接受“JOHN”
答案如下:
current_users=["Master","paopao","mary","Alice","jack"] new_users=["mack","tom","Mary","alice","james"] current_users_1=[] for oldname in current_users: oldname=oldname.lower() current_users_1.append(oldname) for newname in new_users: if newname.lower() in current_users_1: print(newname,"你好,你註冊的名字已被佔用,請重新註冊。") else: print(newname,"你好,你註冊的名字可用。")
輸出結果:
mack 你好,你註冊的名字可用。
tom 你好,你註冊的名字可用。
Mary 你好,你註冊的名字已被佔用,請重新註冊。
alice 你好,你註冊的名字已被佔用,請重新註冊。
james 你好,你註冊的名字可用
如果有對本段代碼不懂的同學,可以親自來問我。當然,有更好優化代碼方案的,請務必告訴我。
一個簡單的字典示例
student={"name":"master","age":18} print(student["name"]) print(student["age"])
字典student存儲了一個學生的名字和年齡,使用print()來打印結果,會看見:
master
18
字典的概念
在python中,字典是一系列的鍵-值對,每一個鍵都與一個值相對應,使用的符號是大括號{ }。
你可以使用鍵來訪問與之相對應的值,與鍵相關聯的值可以是數字、字符串、列表乃至字典。
字典dict的公式:{key1:value1,key2:value2,...}
鍵和值之間用冒號分隔,鍵-值對與鍵值對用逗號隔開。
創建字典並學會如何訪問值
我們來創造一個包含更多學生信息的字典:
student={ "name":"master", "age":18, "sex":"男", "class":"軟件一班", "teacher":"Mr.Lee" }
我們知道,去使用鍵來訪問值:
#獲取學生的名字 print(student["name"]) #獲取學生的性別 print(student["sex"]) #獲取學生的班級 print(student["class"])
可以看到結果如下所示:
master
男
軟件一班
添加新的鍵-值對和修改鍵的值
首先複習一下列表如果想要添加新的元素的時候,有哪幾種方法:
list_1.append() :末尾追加一個新的元素
list_1.insert():某索引位置加入新的元素
小提示:爲什麼不直接命名list?--->關鍵詞不能用來做變量名
字典添加新的鍵-值對相對於列表是非常方便的:
student["school"]="哈佛大學" student["address"]="熱河路"
然後我們print(student)來看看字典發生了怎麼樣的變化:
{ 'name': 'master', 'age': 18, 'sex': '男', 'class': '軟件一班', 'teacher': 'Mr.Lee', 'school': '哈佛大學', 'address': '熱河路' }
是不是非常快速多了,只需要給字典的索引上創一個新的鍵,等於號後面寫上所對應的值,就可以產生新的鍵-值對了。
那麼實際上我這個student字典非常不貼實際的,存在吹牛逼的成分,master考上哈佛大學,有那麼牛逼嗎?
那麼如何修改字典裏面的值呢?
student["age"]=20 student["school"]="野雞大學" print(student)
我們可以發現,字典修改值和列表修改元素的方法都一樣,給指定索引重新定義數據就可以完成修改:
{ 'name': 'master', 'age': 20, 'sex': '男', 'class': '軟件一班', 'teacher': 'Mr.Lee', 'school': '野雞大學', 'address': '熱河路' }
現在這個student字典裏的信息是不是看上去順眼多了?
刪除鍵-值對
我們在上面使用student字典的過程中,鍵"teacher":值"Mr.Lee"這一對並沒有用過。
所以,我們就考慮刪除掉這一對,刪除的方法使用del:
del student["teacher"] print(student)
刪除的方法,字典和列表也一樣,用del刪除指定的鍵,就能刪除掉鍵-值對,不再出現。
{ 'name': 'master', 'age': 20, 'sex': '男', 'class': '軟件一班', 'school': '野雞大學', 'address': '熱河路' }
使用for遍歷字典
①遍歷所有的鍵-值對
首先有student字典:
{
'name': 'master',
'age': 20,
'sex': '男',
'class': '軟件一班',
'school': '野雞大學',
'address': '熱河路'
}
如何將這些數據更爲直觀的鍵-值打印在窗口上:
for key,value in student.items(): print("鍵:",key) print("值:",value) print()
要注意的是,字典並不能直接與for相結合使用:
這時,items()應運而生,它的作用是把字典轉換爲列表形式,鍵-值對轉換爲元組。
dict_items([('name', 'master'), ('age', 20), ('sex', '男'), ('class', '軟件一班'), ('school', '野雞大學'), ('address', '熱河路')])
輸出結果:
鍵: name
值: master
鍵: age
值: 20
鍵: sex
值: 男
鍵: class
值: 軟件一班
鍵: school
值: 野雞大學
鍵: address
值: 熱河路
②遍歷字典中的所有鍵
在這兒,我們要重新定義一個字典,來幫助你完成更好理解這個小節:
一個學生字典,學生名字爲鍵,年齡爲值
student={ "張三":18, "李四":20, "王五":22, "馬六":23 }
現在,我要遍歷出這個字典的所有人的名字:
for name in student.keys(): print(name)
keys()方法極爲有用,也不需要經過一些複雜的轉換列表操作,可以直接提取出所有的鍵。
輸出結果:
張三
李四
王五
馬六
③遍歷字典中的所有值
和上面方法一樣,直接使用values方法提取所有的值。
for name in student.values(): print(name)
輸出結果:
18
20
22
23
字典的嵌套用法
①列表存儲字典元素
我們創建三個學生信息的字典,含有姓名和年齡:
student1={"name":"張三","age":18} student2={"name":"李四","age":19} student3={"name":"王五","age":20}
然後,我們可以把這三個字典,存儲到列表裏作爲元素:
student_list=[student1,student2,student3] print(student_list)
輸出結果:
[{'name': '張三', 'age': 18}, {'name': '李四', 'age': 19}, {'name': '王五', 'age': 20}]
②字典存儲列表值
我在上面提過一句話:
你可以使用鍵來訪問與之相對應的值,與鍵相關聯的值可以是數字、字符串、列表乃至字典。
在上面我們已經見識了數字和字符串類型作爲值,現在來看一看列表作爲值的情況:
在上面中,我們認識了張三,李四和王五,現在調查他們的愛好,得到下面的結果
張三的愛好:編程,游泳和打遊戲
李四的愛好:編程,看書和踢足球
王五的愛好:撩妹,喝酒和打遊戲
然後,他們都是來自軟件一班,就用appclass_one作爲字典變量,
他們的名字作爲鍵,他們的愛好作爲值並用列表的形式:
appclass_one={ "張三":["編程","游泳","打遊戲"], "李四":["編程","看書","踢足球"], "王五":["撩妹","喝酒","打遊戲"] }
現在,我們將這個字典數據以更爲直觀的形式出現在打印窗口:
for people,favourites in appclass_one.items(): print(people+"的愛好如下:") for favourite in favourites: print("\t",favourite) print()
先來看看輸出結果:
張三的愛好如下:
編程
游泳
打遊戲
李四的愛好如下:
編程
看書
踢足球
王五的愛好如下:
撩妹
喝酒
打遊戲
那麼要考慮到一些零基礎的同學,可能會一時無法理解代碼的原理,我可以給出大概的解釋如下:
第一行肯定是先提取出鍵和值出來,items()是轉換成列表形式,
縮進之後來到第二行,打印出人名的愛好消息,這時候如果來到第三行直接打印,
第三行直接是一行列表形式的愛好,肯定不夠直觀,而且我不想要看見列表的符號,
所以再對這個列表進行提取每個元素處理,把每個元素但獨佔一行,
“\t”是橫向製表符,也就是製造橫向空格,讓整體效果更爲直觀。
最後一行的print()屬於換行,然後繼續訪問字典裏第二個人名……
③字典存儲字典值
字典的值也可以是字典的形式,比如定義一個班級字典,裏面有很多學生的信息:
appclass_one={ "student1":{"name":"張三","age":18}, "student2":{"name":"李四","age":19}, "student3":{"name":"王五","age":20} }
如果想像上面一樣出題目的話,其實也不用浪費筆墨,多用一次items()方法即可。
作業來襲:
創建一個名爲cities的字典,其中將三個城市名用作鍵,對於每個城市的所屬省份、人口數、是否爲省會等等創建一個字典作爲值。
然後以更爲直觀的形式打印出這些信息在輸出窗口。
恭喜你!字典在你面前成功地做了弟弟,接下來的一篇博客你將接觸到while循環和input獲取用戶輸入。
建議再次複習往期博客加強複習!