紮實基礎深入篇(五):字典也就是個弟弟

在本篇博客中,你將能學習到能夠將相關信息關聯起來的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獲取用戶輸入。

建議再次複習往期博客加強複習!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章