十、Python第十課——字典的些許知識(重點)

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419

目錄

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419

初識字典

1、創建字典?

2、字典的“增刪改查”

A、字典的“增”

B、字典的“刪”

C、字典的“改”?

?D、字典的“查”

*由類似對象組成的字典?

3、遍歷字典

?A、遍歷字典鍵值對

B、遍歷字典中所有的鍵

C、有序遍歷字典中所有的鍵

D、遍歷字典中所有的值

4、嵌套

?A、字典列表(把字典存儲在列表里)

B、列表字典(把列表存儲在字典里)

C、字典字典(把字典存儲在字典里)


初識字典

? ? ? ? Python中“字典”的概念和我們小學學習使用的新華字典是一個概念。我們接下來對比一下這兩個概念,方便大家理解和學習。

新華字典:A、拼音對應“字”或者筆畫對應“字”(指兩種查字方式)B、存儲量有限,包含字音、筆順、組詞、例句、近義反義詞等? ?

Python中的字典:A、字典名和“鍵”對應“與鍵相關聯的值”? ? ? ? ? ? ? B、存儲量無限,可以包含任意信息,比如:書中介紹的外星人的各種參數:顏色、分數。

? ? ? ? 上面只是一個對Python字典的一個簡單的介紹,接下來,我們會詳細介紹什么是字典?什么是鍵值對?如何創建字典?如何在字典中增加新的內容??等等

1、創建字典?

我們用幾行代碼,來演示如何創建字典:

alien_0={'color':'green','points':5}   #創建外星人字典,包含屬性為外星人的顏色及分值
print(alien_0['color'])                #輸出外星人的顏色
print(alien_0['points'])               #輸出外星人的分值

?

? ? ? ? 上述代碼的第一行就是創建字典?,在Python中,字典是一系列“鍵-值”對,每個鍵都與一個值相關聯,與鍵相關聯的值可以是數字、字符串、列表乃至字典。這個鍵值對就可以理解為鍵盤上的每一個鍵帽,你按哪個,哪個就出現在顯示器上。就上述代碼而言,alien_0是字典名,花括號里的“‘color:‘green’,‘point’:5”是兩組鍵-值對(鍵-值對是兩個相關聯的值。指定鍵時,Python將返回與之相關聯的值。鍵和值之間用冒號分隔,而每一組鍵-值對之間用逗號分隔。)在字典中,你想存儲多少個鍵-值對都可以。? ? ? ?

2、字典的“增刪改查”

A、字典的“增”

? ? ? 字典是一種動態結構,可隨時在其中增添鍵-值對。要增添鍵值對,可依次指定字典名、用方括號括起來的鍵和相關聯的值。那么接下來我們仿照書中的例子,在剛才創建好的字典中,增加外星人的x、y的坐標,代碼如下:

alien_0 = {'color' : 'green' , 'points' : 5 }   #創建外星人字典,包含屬性為外星人的顏色及分值
alien_0['x_position'] = 0            #外星人的橫坐標為0
alien_0['y_position'] = 25           #外星人的縱坐標為25
print(alien_0)                       #打印外星人這個字典

??

? ? ? ?到目前為止,剛剛創建的字典已經包含4個鍵值對了。Python不關心鍵-值對的添加順序,而只關心鍵和值之間的關聯關系。

? ? ? 有些特定情況下,我們需要先創建一個空白字典,然后再對其進行增添鍵-值對的操作。情景為:用字典保存用戶輸入的內容或在編寫能自動生成大量鍵值對的代碼時,預先定義一個空字典。如下代碼所示:?

alien_0 = {}   #創建一個空字典
alien_0['color'] = 'green' #增添外星人顏色鍵值對
alien_0['points'] = 5      #增加外星人分數鍵值對
print(alien_0)             #打印字典

?

B、字典的“刪”

? ? ? ?對于字典中我們不再需要的信息,可使用del語句將相應的鍵值對徹底刪除使用del語句時,必須指定字典名和要刪除的鍵。代碼如下所示:?

alien_0={ 'color' : 'green', 'points' : 5 }   #創建字典
print(alien_0)         #打印字典
del alien_0['points']  #刪除字典中的分數鍵及其鍵值
print(alien_0)         #再次打印字典

?

C、字典的“改”?

要修改字典中的值,可依次指定字典名、方括號括起的鍵以及該鍵相關聯的新值?。例如隨著游戲的進行需要將一個外星人從綠色改為黃色,代碼如下:

alien_0={'color':'green'}  #定義外星人字典,只有一對鍵值對(顏色)
print("The alien is "+alien_0['color']+". ")  #打印外星人的字典
alien_0['color']='yellow'   #將外星人的顏色改為黃色
print("The alien is "+alien_0['color']+". ")  #再次打印外星人字典

?

?D、字典的“查”

我們定義了鍵值對之后,就要通過指定鍵來訪問鍵值對了。上述代碼的第二、第三行就是通過指定字典名、鍵訪問鍵值的實例。那么下面再給出一個例子:(這個例子是為后來的Python游戲項目服務的,用來顯示用戶實時獲得的分數)

alien_0 = {'color':'green','points':5}   #創建外星人字典,包含屬性為外星人的顏色及分值
new_points = alien_0['points']   #訪問外星人的點數,并存儲在new_points中
print('You just earned '+str(new_points)+' points! ')               #輸出外星人的分值

?

*由類似對象組成的字典?

? ? ? 前面的例子中,使用字典存儲一個對象(游戲中的一個外星人)的多種信息,接下來我們使用字典存儲眾多對象中的同一種信息。例如存儲多個人喜歡的編程語言。代碼如下:

favorite_language={'jen':'Python',   #將大字典放在了多行,其中的每個鍵都是一個人名,'sarah':"c",      #每個值都是被調查者喜歡的語言'edward':"ruby",'pjil':"Python"}
#輸出Sarah最喜歡的語言
#下面的print語句格式還演示了如何將較長的print語句分為多行
#在合適位置拆分打印內容,并在第一行末尾加上一個“+”,回車進入
#后續行,使用Tab鍵將他們對齊并縮進一級。指定所有打印的內容后,
#在print最后一行末尾加上右括號。
print("Sarah's favorite language is "+favorite_language['sarah'].title()+". ")

在這種情況下,大家要注意代碼的格式,大多數編輯器都有自己的設置格式的功能。(Pycharm中可以使用Tab鍵和空格鍵控制格式,提高代碼的可讀性!)

3、遍歷字典

剛才也說了,字典包含的信息量是無限的,所以就需要一種方法對字典進行查詢(專業術語叫“遍歷”),而Python也支持對字典的遍歷。因為字典以多種方式存儲信息,因此也有多種方法去遍歷字典:可遍歷字典的所有鍵-值對、鍵或者值。

?A、遍歷字典鍵值對

?以代碼為例,演示一下如何遍歷字典鍵值對:

# 定義一個子字典,存儲用戶姓名
user_0={'username':'efermi','first':'erico','last':'fermi',}
# 一個for循環進行字典“遍歷”
for key,value in user_0.items():
# 編寫用于遍歷字典的for循環,聲明兩個變量,用于存儲鍵值對中的“鍵”和“值”
# 這兩個變量名可以自己命名,不用拘于例代碼,但最好讓人易于理解。
# for這一行代碼使用了items方法,此方法每次返回一個鍵值對的值,分別保存
# 在聲明的兩個變量中。print("\nKey: "+ key )print("Value: "+ value )
# 我看的參考書中,反復提及“鍵值對的返回順序與存儲順序不同,Python不關心
# 鍵值對的存儲順序,只跟蹤鍵和值的關聯關系”

B、遍歷字典中所有的鍵

?在Python中Key()方法就是用來獲取字典鍵的。通過例代碼說明:

#創建一個字典
favorite_languages = {'jen':'python','sarah':'c','edward':'ruby','phil':'python'}
#循環獲取字典中鍵值對的“鍵”,并打印
for name in favorite_languages.keys():print(name.title())

? ? ? ? 遍歷字典,默認會遍歷所有的鍵。所以如果在上述代碼中不使用key()方法,輸出是不會變的。我們現在有了字典的“鍵”,那么是否可以通過“鍵”來獲取對應的“值”呢?答案是可以的,例代碼如下:

# 創建一個字典
favorite_languages = {'jen':'python','sarah':'c','edward':'ruby','phil':'python'}
# 設定朋友范圍
frinends=['phil','sarah']
# 循環獲取字典中鍵值對的“鍵”,并打印
for name in favorite_languages.keys():# 在朋友范圍內的才打印出來,下面的代碼要記住print第三行“依鍵尋值”的表達if name in frinends:print("Hi "+name.title()+", "+"I see your favorite_languages is "+favorite_languages[name].title()+"! ")

C、有序遍歷字典中所有的鍵

?字典總是明確地記錄鍵和值之間的關系,但獲取字典的元素時,獲取順序是不可預測的。要以特定順序返回元素,一種辦法是在for循環中對返回的鍵進行排序。所以,我們可以使用函數sorted()來獲得按特定順序排列的鍵列表的副本:

# 創建一個字典
favorite_languages = {'jen':'python','sarah':'c','edward':'ruby','phil':'python'}# 循環獲取字典中鍵值對的“鍵”,并打印.其中使用sorted函數
for name in sorted(favorite_languages.keys()):print(name.title()+", "+"thank you for taking the poll. ")

D、遍歷字典中所有的值

如果我們的關注點在“值”而不在“鍵”上,那么我們可以使用values()方法,返回一個值列表。例如,我們只想知道一個這樣的列表,其中只包含被調查者選擇的各種語言,而不包含被調查者的名字,代碼如下:

# 創建一個字典
favorite_languages = {'jen':'python','sarah':'c','edward':'ruby','phil':'python'}
print("The following languages have been mentioned:")
#使用values()方法返回鍵值對中的值,并輸出
for language in favorite_languages.values():print(language.title())

?

上述代碼在提取時,顯而易見沒有考慮到某種語言重復出現的情況。值少的時候還好,多的時候,最終的列表將會出現大量的重復項。這就需要我們使用一定的方法對上述的列表進行“剔除重復項”的操作。能完成這個操作的方法時set(),集合(大家都知道集合的三要素之一就是“唯一性”)。那么我們將這個方法加入到上述代碼中:

# 創建一個字典
favorite_languages = {'jen':'python','sarah':'c','edward':'ruby','phil':'python'}
print("The following languages have been mentioned:")
#使用values()方法返回鍵值對中的值、set()方法剔除重復項,并輸出
for language in set(favorite_languages.values()):print(language.title())

從結果可以看出,調用set()函數可讓Python找出列表中獨一無二的元素,并使用這些元素創造一個集合。

4、嵌套

?有些時候,需要將一系列字典存儲在列表中,或將列表作為值存儲在字典中,這稱為嵌套可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典,由此可見嵌套是一項強大的功能。

?A、字典列表(把字典存儲在列表里)

? ? ? ?還是我們老生常談的外星人代碼,我們之前創造的外星人字典alien_0里包含一個外星人的各種信息,但是無法存儲第二個外星人的信息了,更別說成群結隊的外星人信息了,那怎么辦?第一種辦法,創建一個外星人列表,其中每個外星人都是一個字典,包含有關該外星人的各種信息。例代碼如下:

#外星人字典
alien_0 = {'color':'green','points':5}
alien_1 = {'color':'yellow','points':10}
alien_2 = {'coloe':'red','points':15}
#將三個外星人存儲在列表alien里
aliens=[alien_0,alien_1,alien_2]
#使用for循環,打印三個外星人的字典
for alien in aliens:print(alien)

這是字典和列表嵌套的一個例子,在實際情況中,我們游戲中的外星人應該是很多的(不知這三個),那么我們就需要自動生成其他外星人,例代碼如下:

# 創建一個外星人空列表
aliens=[]
# 使用for循環自動創建30個外星人(字典),并追加到上述創建好的外星人列表里
for alien_number in range(30):new_alien={'color':'green','points':5,'speed':'slow'}aliens.append(new_alien)
# 顯示前5個外星人
for alien in aliens[:5]:print(alien)
# 顯示省略號
print("......")
# 顯示一共自動化創建了多少外星人,使用獲取列表長度函數以及轉換為字符串的函數
print("Total number of aliens: "+str(len(aliens)))

雖然代碼的注釋很清楚了,但還是對上面代碼進行一個解釋吧:例代碼中,首先創建了一個空列表,用于存儲接下來創建的所有外星人。range()返回一系列數字,唯一用途是告訴Python接下來要重復這個循環多少次。每次執行這個循環時,都會創建一個外星人,并將其追加到aliens末尾。最后再來一個循環,切片打印前五個外星人的字典,并打印省略號和外星人的總數目。

我們創建好的字典列表也可以通過3中所學的字典的“改”,對外星人的屬性進行修改。必要時,可以使用for循環和if語句來修改某些外星人的顏色。

B、列表字典(把列表存儲在字典里)

有時候,需要把列表存儲在字典里。(需要與上一小節區別開,上一小節是把字典放在列表里,相當于宏觀上還是列表。這個是把列表放在字典里,宏觀上是字典。字典列表和列表字典分不清楚,就看最后兩個字是字典還是列表。) 這里引入一個情景:比薩店如何記錄顧客點的披薩呢?如果僅使用列表,那么只能存儲要添加的披薩配料;但如果在前者的基礎上加上字典,不僅可以在其中包含配料列表,還可包含其他有關披薩的描述。例代碼如下:

# 存儲所點披薩信息
pizza={'crust':'thick','toppings':['mushroom','extra cheese'],}
# 概述所點的披薩
print("You ordered a " + pizza['crust']+'-crust pizza' + ' with the following toppings:')for topping in pizza['toppings']:print('\t' + topping)

上面的代碼首先創建了一個字典,其中存儲了有關顧客所點披薩的信息。在這個字典中,一個鍵是‘crust’,與之相關聯的值是字符串‘thick’;下一個鍵是‘toppings’,與之相關聯的值是一個列表,其中存儲了顧客要求添加的所有配料。最后對以上信息進行打印。每當需要在字典中將一個鍵關聯到多個值時,都可以在字典中嵌套一個列表。例如:

# 創建列表字典,存儲每個人喜歡的語言
favorite_languages={'jen':['python','ruby'],'sarah':['c'],'edward':['ruby','go'],'phil':['python','haskell'],}
# 使用items()方法返回字典里的鍵值對
for name,languages in favorite_languages.items():print("\n" + name.title() + "'s favorite languages are: ")#對返回到languages里的語言進行循環輸出for language in  languages:print("\t" + language.title())

上述代碼還有修改的余地:因為Sarah最喜歡的語言就只有一種,但是輸出卻是“are”,這不是犯了最低級的英語語法錯誤了嗎?那么我們在最大for循環開始加一條if語句,調用len()判斷一下返回到languages變量里的“長度”是多長,就可以針對不同的人進行不同的輸出,避免錯誤的發生。除此以外,列表和字典的嵌套層級不應太多。如果嵌套層級太多,就會很搞腦子(手動狗頭)

C、字典字典(把字典存儲在字典里)

字典和字典嵌套,代碼比較復雜。使用場景:如果有多個網站用戶,每個都有獨特的用戶名,可在字典中將用戶名作為鍵,將每位用戶的信息存儲在一個字典A中,最后將鍵和字典A連接起來,形成大字典的鍵值對。例代碼如下:

# 創建字典,里面使用字典存儲用戶個人信息
users = {'aeinstein':{'first':'albert','last':'einstein','location':'princeton'},'mcurie':{'first':'marie','last':'curie','location':'paris'},
}
# 循環語句,使用items()返回用戶名和用戶信息,將用戶名存儲在username里,將用戶信息
# 字典存儲在userinformation里
for username , userinformation in users.items():print("\nUsername: "+ username)# 對用戶名的姓和名進行拼接,使用用戶信息字典的鍵來遍歷用戶的姓、名、地址信息full_name = userinformation['first'] + " " + userinformation['last']location = userinformation['location']print("\tFull name: " + full_name.title())print("\tlocation: " + location.title())

注意:表示每位用戶的字典的結構都相同,Python沒這么要求,但這使得嵌套的字典處理起來更容易。如果表示每位用戶的字典都包含不同的鍵,for循環內部的代碼就會復雜起來。

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531076.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531076.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

百度地圖API如何申請?(自認為比較詳細,如解決了你的問題請收藏、點贊、關注)

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 注意:自己申請的AK要保存好,最好不要外借,避免不必要的麻煩!(寫在前面) 目…

PythonPyqt5項目開發完成后如何使用pyinstaller打包——以Pycharm編輯器為例(目前為止最正確的版本,成功打包日期為2020.11.26)

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 最近用Python開發了一個可視化界面,開發過程如魚得水,幾乎沒有BUG出現(項目簡單)。但是在臨近交付時…

十一、Python第十一課——用戶輸入和另一種循環(While)

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 學了這么久的Python,大家肯定會好奇,不是說機器學習嗎?不是人機交互嗎?不是人工智能嗎?怎么我學了Python都十…

如何讓新創建的Python文件自動生成作者信息等內容(以Pycharm為例)

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 打開Pycharm軟件后,點擊“File”,然后點擊“Settings”,就會出現下面截圖界面:然后按照箭頭所指,在對應位置…

如何將谷歌瀏覽器的背景色(包括顯示的網站界面等)全部調為黑色?2020.12.28

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 因為電腦顯示器正對窗戶的原因,平時為了透氣通風不能使用遮光簾,所以我將整個電腦的所有軟件的主題色設為黑色,這樣能降低一些光的…

Windows 10如何消除文件夾右上角的“相對箭頭”?

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 整理筆記本電腦時發現&#xff0…

目標檢測第1步:如何在Windows 10下安裝MiniConda?

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 目錄 一、Conda是什么&#xff…

十二、Python第十二課——函數

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目錄 (請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目錄 目錄 (請先看置頂博文&#xff…

目標檢測第2步:如何在Windows 10下安裝Anaconda?

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 想要學習目標檢測的朋友可能會發…

目標檢測第3步:如何在Windows 10系統下安裝CUDA(更新時間2022.03.22)

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 目錄 一、自檢 1、查看PC是否…

目標檢測第5步:如何在Windows 10系統下,搭建YOLOv5(5.0)環境?保姆級,沒有人比這個更詳細了(更新時間2022.3.22)

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 目錄 一、安裝Anaconda或Minic…

導入自己寫的類,卻被標紅,原因及解決方法是?(Pycharm編輯器為例)

(請先看這篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 如果看完這篇博文,你的問題還是沒有解決,那么加我的公眾號,后臺發消息給我吧!當天回復&#xff01…

如何將Word與Endnote再次相互關聯?

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 Endnote是每一個科研人員都接觸…

十三、Python第十三課——類(包含對類的相關概念的理解,這一文的附錄讓你徹底明白類和對象)

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目錄 (請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 一、類和對象 1、類 2、對象 二、類的創建和實例…

十四、Python第十四課——文件和異常

(請先看這篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 如果看完這篇博文,你的問題還是沒有解決,那么請關注我的公眾號,后臺發消息給我吧,當天回復&#x…

目標檢測第6步:YOLOv5(5.0)如何在Colab中訓練自定義數據集?(更新時間:2022.3.22)

(請先看這篇文章:本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客) 如果看完這…

十五、Python第十五課——測試代碼

(請先看這篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 也許你聽過軟件測試?編寫函數或類時,可以為其編寫對應的測試代碼。通過測試,可檢驗代碼是否能夠按照編寫意圖工作。在…

Windows 10環境下如何安裝CMake?(更新時間:2021.9.13)

(請先看這篇文章:本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客) 1、下載Cmake 下…

Windows 10環境下AndroidStudio安裝教程(內含如何配置Http Proxy)

(請先看這篇文章:本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客) 一、AndroidStudi…

如何將Android Studio卸載的干干凈凈?

(請先看這篇文章:本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客) 1、打開控制面板&…