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

在本篇博客中,你將能學習到可以將相關信息關聯起來的Python字典,以及一些對字典的操做。python

 

在講正事以前,不能忘了上一篇博客佈置下來的做業:編程

執行如下操做以建立一個程序,該程序模擬網站如何確保每一個人都有惟一的用戶名。
 •列出包含五個或更多用戶名的列表current_users;再列出包含五個新用戶名的列表new_users,
確保一個或兩個新用戶名也在當前用戶列表中。
 •循環瀏覽新用戶列表,查看每一個新用戶名是否已被使用。若是有,請打印一條消息,說明此人須要輸入新的用戶名。
若是沒有使用用戶名,請打印一條消息,說明用戶名可用。
 •確保你的比較不區分大小寫。若是使用了「john」,則不該接受「JOHN」

答案以下:app

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 你好,你註冊的名字可用優化

若是有對本段代碼不懂的同窗,能夠親自來問我。固然,有更好優化代碼方案的,請務必告訴我。網站

 

一個簡單的字典示例 spa

 

student={"name":"master","age":18}
print(student["name"])
print(student["age"])

 字典student存儲了一個學生的名字和年齡,使用print()來打印結果,會看見:code

master
18blog

 

字典的概念索引

在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獲取用戶輸入。

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

相關文章
相關標籤/搜索