目錄
?編輯
6.2.4 修改字典中的值
?6.2.5 刪除鍵—值對
注意 刪除的鍵—值對永遠(yuǎn)消失了。
?6.2.6 由類似對象組成的字典
6.3 遍歷字典
6.3.1 遍歷所有的鍵—值對
6.3.2 遍歷字典中的所有鍵
往期快速傳送門??(在文章最后):
6.2.4 修改字典中的值
要修改字典中的值,可依次指定字典名、用方括號括起的鍵以及與該鍵相關(guān)聯(lián)的新值。例如, 假設(shè)隨著游戲的進(jìn)行,需要將一個(gè)外星人從綠色改為黃色:
alien_0 = {'color': 'green'}
print("The alien is " + alien_0['color'] + ".")
alien_0['color'] = 'yellow'
print("The alien is now " + alien_0['color'] + ".")
我們首先定義了一個(gè)表示外星人alien_0的字典,其中只包含這個(gè)外星人的顏色。接下 來,我們將與鍵'color'相關(guān)聯(lián)的值改為'yellow'。輸出表明,這個(gè)外星人確實(shí)從綠色變成 了黃色:
The alien is green.
The alien is now yellow.
來看一個(gè)更有趣的例子:對一個(gè)能夠以不同速度移動的外星人的位置進(jìn)行跟蹤。為此,我們 將存儲該外星人的當(dāng)前速度,并據(jù)此確定該外星人將向右移動多遠(yuǎn):
alien_0 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
print("Original x-position: " + str(alien_0['x_position']))
# 向右移動外星人
# 據(jù)外星人當(dāng)前速度決定將其移動多遠(yuǎn)
1 if alien_0['speed'] == 'slow':
x_increment = 1
elif alien_0['speed'] == 'medium':
x_increment = 2
else:
# 這個(gè)外星人的速度一定很快
x_increment = 3
# 新位置等于老位置加上增量
2 alien_0['x_position'] = alien_0['x_position'] + x_increment
print("New x-position: " + str(alien_0['x_position']))
我們首先定義了一個(gè)外星人,其中包含初始的x坐標(biāo)和y坐標(biāo),還有速度'medium'。出于簡化 考慮,我們省略了顏色和點(diǎn)數(shù),但即便包含這些鍵1 值對,這個(gè)示例的工作原理也不會有任何變 化。我們還打印了x_position的初始值,旨在讓用戶知道這個(gè)外星人向右移動了多遠(yuǎn)。 在?處,使用了一個(gè)if-elif-else結(jié)構(gòu)來確定外星人應(yīng)向右移動多遠(yuǎn),并將這個(gè)值存儲在變 量x_increment中。如果外星人的速度為'slow',它將向右移動一個(gè)單位;如果速度為'medium', 將向右移動兩個(gè)單位;如果為'fast',將向右移動三個(gè)單位。確定移動量后,將其與x_position 的當(dāng)前值相加(見2 ),再將結(jié)果關(guān)聯(lián)到字典中的鍵x_position。 由于這是一個(gè)速度中等的外星人,因此其位置將向右移動兩個(gè)單位:
Original x-position: 0
New x-position: 2
這種技術(shù)很棒:通過修改外星人字典中的值,可改變外星人的行為。例如,要將這個(gè)速度中 等的外星人變成速度很快的外星人,可添加如下代碼行:
alien_0['speed'] = fast
這樣,再次運(yùn)行這些代碼時(shí),其中的if-elif-else結(jié)構(gòu)將把一個(gè)更大的值賦給變量 x_increment。
?6.2.5 刪除鍵—值對
對于字典中不再需要的信息,可使用del語句將相應(yīng)的鍵—值對徹底刪除。使用del語句時(shí), 必須指定字典名和要刪除的鍵。 例如,下面的代碼從字典alien_0中刪除鍵'points'及其值:
alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
1 del alien_0['points']
print(alien_0)
1 處的代碼行讓Python將鍵'points'從字典alien_0中刪除,同時(shí)刪除與這個(gè)鍵相關(guān)聯(lián)的值。 輸出表明,鍵'points'及其值5已從字典中刪除,但其他鍵—值對未受影響:
{'color': 'green', 'points': 5}
{'color': 'green'}
注意 刪除的鍵—值對永遠(yuǎn)消失了。
?6.2.6 由類似對象組成的字典
在前面的示例中,字典存儲的是一個(gè)對象(游戲中的一個(gè)外星人)的多種信息,但你也可以 使用字典來存儲眾多對象的同一種信息。例如,假設(shè)你要調(diào)查很多人,詢問他們最喜歡的編程語 言,可使用一個(gè)字典來存儲這種簡單調(diào)查的結(jié)果,如下所示:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
正如你看到的,我們將一個(gè)較大的字典放在了多行中。其中每個(gè)鍵都是一個(gè)被調(diào)查者的名字, 而每個(gè)值都是被調(diào)查者喜歡的語言。確定需要使用多行來定義字典時(shí),在輸入左花括號后按回車 鍵,再在下一行縮進(jìn)四個(gè)空格,指定第一個(gè)鍵—值對,并在它后面加上一個(gè)逗號。此后你再次按 回車鍵時(shí),文本編輯器將自動縮進(jìn)后續(xù)鍵—值對,且縮進(jìn)量與第一個(gè)鍵—值對相同。
定義好字典后,在最后一個(gè)鍵—值對的下一行添加一個(gè)右花括號,并縮進(jìn)四個(gè)空格,使其與 字典中的鍵對齊。另外一種不錯的做法是在最后一個(gè)鍵—值對后面也加上逗號,為以后在下一行 添加鍵—值對做好準(zhǔn)備。
注意 對于較長的列表和字典,大多數(shù)編輯器都有以類似方式設(shè)置其格式的功能。對于較長的 字典,還有其他一些可行的格式設(shè)置方式,因此在你的編輯器或其他源代碼中,你可能 會看到稍微不同的格式設(shè)置方式。
給定被調(diào)查者的名字,可使用這個(gè)字典輕松地獲悉他喜歡的語言:
favorite_languages.py
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
1 print("Sarah's favorite language is " +
2 favorite_languages['sarah'].title() +
3 ".")
為獲悉Sarah喜歡的語言,我們使用如下代碼:
favorite_languages['sarah']
在print語句中,我們使用了這種語法(見2);輸出指出了Sarah喜歡的語言:
Sarah's favorite language is C.
這個(gè)示例還演示了如何將較長的print語句分成多行。單詞print比大多數(shù)字典名都短,因此 讓輸出的第一部分緊跟在左括號后面是合理的(見1)。請選擇在合適的地方拆分要打印的內(nèi)容, 并在第一行末尾(見)加上一個(gè)拼接運(yùn)算符(+)。按回車鍵進(jìn)入print語句的后續(xù)各行,并使 用Tab鍵將它們對齊并縮進(jìn)一級。指定要打印的所有內(nèi)容后,在print語句的最后一行末尾加上右 括號(見3)。
6.3 遍歷字典
一個(gè)Python字典可能只包含幾個(gè)鍵—值對,也可能包含數(shù)百萬個(gè)鍵—值對。鑒于字典可能包含 大量的數(shù)據(jù),Python支持對字典遍歷。字典可用于以各種方式存儲信息,因此有多種遍歷字典的 方式:可遍歷字典的所有鍵—值對、鍵或值。
6.3.1 遍歷所有的鍵—值對
探索各種遍歷方法前,先來看一個(gè)新字典,它用于存儲有關(guān)網(wǎng)站用戶的信息。下面的字典存 儲一名用戶的用戶名、名和姓:
user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}
利用本章前面介紹過的知識,可訪問user_0的任何一項(xiàng)信息,但如果要獲悉該用戶字典中的 所有信息,該怎么辦呢?可以使用一個(gè)for循環(huán)來遍歷這個(gè)字典:
user.py
user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}
1 for key, value in user_0.items():
2 print("\nKey: " + key)
3 print("Value: " + value)
如1所示,要編寫用于遍歷字典的for循環(huán),可聲明兩個(gè)變量,用于存儲鍵—值對中的鍵和值。 對于這兩個(gè)變量,可使用任何名稱。下面的代碼使用了簡單的變量名,這完全可行:
for k, v in user_0.items()
for語句的第二部分包含字典名和方法items()(見1),它返回一個(gè)鍵—值對列表。接下來, for循環(huán)依次將每個(gè)鍵—值對存儲到指定的兩個(gè)變量中。在前面的示例中,我們使用這兩個(gè)變量來 打印每個(gè)鍵(見 2 )及其相關(guān)聯(lián)的值(見 3 )。第一條print語句中的"\n"確保在輸出每個(gè)鍵—值對 前都插入一個(gè)空行:
Key: last
Value: fermi
Key: first
Value: enrico
Key: username
Value: efermi
注意,即便遍歷字典時(shí),鍵—值對的返回順序也與存儲順序不同。Python不關(guān)心鍵—值對的存 儲順序,而只跟蹤鍵和值之間的關(guān)聯(lián)關(guān)系。
在6.2.6節(jié)的示例favorite_languages.py中,字典存儲的是不同人的同一種信息;對于類似這 樣的字典,遍歷所有的鍵—值對很合適。如果遍歷字典favorite_languages,將得到其中每個(gè)人 的姓名和喜歡的編程語言。由于其中的鍵都是人名,而值都是語言,因此我們在循環(huán)中使用變量 name和language,而不是key和value,這讓人更容易明白循環(huán)的作用:
favorite_languages.py
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
1 for name, language in favorite_languages.items():
2 print(name.title() + "'s favorite language is " +
language.title() + ".")
1 處的代碼讓Python遍歷字典中的每個(gè)鍵—值對,并將鍵存儲在變量name中,而將值存儲在變 量language中。這些描述性名稱能夠讓人非常輕松地明白print語句(見2 )是做什么的。 僅使用幾行代碼,我們就將全部調(diào)查結(jié)果顯示出來了:
Jen's favorite language is Python.
Sarah's favorite language is C.
Phil's favorite language is Python.
Edward's favorite language is Ruby.
即便字典存儲的是上千乃至上百萬人的調(diào)查結(jié)果,這種循環(huán)也管用
6.3.2 遍歷字典中的所有鍵
在不需要使用字典中的值時(shí),方法keys()很有用。下面來遍歷字典favorite_languages,并 將每個(gè)被調(diào)查者的名字都打印出來:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
1 for name in favorite_languages.keys():
print(name.title())
1 處的代碼行讓Python提取字典favorite_languages中的所有鍵,并依次將它們存儲到變量 name中。輸出列出了每個(gè)被調(diào)查者的名字:
Jen
Sarah
Phil
Edward
遍歷字典時(shí),會默認(rèn)遍歷所有的鍵,因此,如果將上述代碼中的for name in favorite_ languages.keys():替換為for name in favorite_languages:,輸出將不變。
如果顯式地使用方法keys()可讓代碼更容易理解,你可以選擇這樣做,但如果你愿意,也可 省略它。
在這種循環(huán)中,可使用當(dāng)前鍵來訪問與之相關(guān)聯(lián)的值。下面來打印兩條消息,指出兩位朋友 喜歡的語言。我們像前面一樣遍歷字典中的名字,但在名字為指定朋友的名字時(shí),打印一條消息, 指出其喜歡的語言:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
1 friends = ['phil', 'sarah']
for name in favorite_languages.keys():
print(name.title())
2 if name in friends:
print(" Hi " + name.title() +
", I see your favorite language is " +
3 favorite_languages[name].title() + "!")
在 1 處,我們創(chuàng)建了一個(gè)列表,其中包含我們要通過打印消息,指出其喜歡的語言的朋友。 在循環(huán)中,我們打印每個(gè)人的名字,并檢查當(dāng)前的名字是否在列表friends中(見 2 )。如果在列 表中,就打印一句特殊的問候語,其中包含這位朋友喜歡的語言。為訪問喜歡的語言,我們使用 了字典名,并將變量name的當(dāng)前值作為鍵(見 3 )。每個(gè)人的名字都會被打印,但只對朋友打印 特殊消息:
Edward
Phil
Hi Phil, I see your favorite language is Python!
Sarah
Hi Sarah, I see your favorite language is C!
Jen
你還可以使用keys()確定某個(gè)人是否接受了調(diào)查。下面的代碼確定Erin是否接受了調(diào)查:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
if 'erin' not in favorite_languages.keys():
print("Erin, please take our poll!")
方法keys()并非只能用于遍歷;實(shí)際上,它返回一個(gè)列表,其中包含字典中的所有鍵,因此 1? 處的代碼行只是核實(shí)'erin'是否包含在這個(gè)列表中。由于她并不包含在這個(gè)列表中,因此打印 一條消息,邀請她參加調(diào)查:
Erin, please take our poll!
Python:核心知識點(diǎn)整理大全1-筆記-CSDN博客
Python:核心知識點(diǎn)整理大全2-筆記-CSDN博客
Python:核心知識點(diǎn)整理大全3-筆記-CSDN博客
Python:核心知識點(diǎn)整理大全4-筆記-CSDN博客
Python:核心知識點(diǎn)整理大全5-筆記-CSDN博客
Python:核心知識點(diǎn)整理大全6-筆記-CSDN博客
Python:核心知識點(diǎn)整理大全7-筆記-CSDN博客
Python:核心知識點(diǎn)整理大全8-筆記-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-752777.html
Python:核心知識點(diǎn)整理大全9-筆記-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-752777.html
往期快速傳送門??(在文章最后):
到了這里,關(guān)于關(guān)于“Python”的核心知識點(diǎn)整理大全11的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!