作者 | 弗拉德
來源 | 弗拉德(公眾號:fulade_me)
字典
字典是另一種可變?nèi)萜髂P颓骼鳎铱纱鎯θ我忸愋蛯ο笥洹W值涞拿總€鍵值 key=>value
對用冒號:
分割,每個鍵值對之間用逗號,
分割,整個字典包括在花括號{}
中沿侈。
使用字典
在Python中,字典是一系列鍵—值對市栗。每個鍵都與一個值相關(guān)聯(lián)缀拭,你可以使用鍵來訪問與之相關(guān)聯(lián)的值。與鍵相關(guān)聯(lián)的值可以是數(shù)字填帽、字符串蛛淋、列表乃至字典。事實上篡腌,可將任何Python對象用作字典中的值褐荷。
來看一個游戲,其中包含一些外星人嘹悼,這些外星人的顏色和點數(shù)各不相同叛甫,如下所示:
alien_0 = {'color': 'green', 'points': 5}
鍵—值對是兩個相關(guān)聯(lián)的值层宫。指定鍵時,Python將返回與之相關(guān)聯(lián)的值其监。鍵和值之間用冒號分隔萌腿,而鍵—值對之間用逗號分隔。在字典中抖苦,你想存儲多少個鍵—值對都可以毁菱。
最簡單的字典只有一個鍵—值對,如下述修改后的字典alien_0
所示:
alien_0 = {'color': 'green'}
這個字典只存儲了一項有關(guān)alien_0
的信息锌历,具體地說是這個外星人的顏色鼎俘。在這個字典中,字符串color
是一個鍵辩涝,與之相關(guān)聯(lián)的值為green
贸伐。
訪問字典中的值
要獲取與鍵相關(guān)聯(lián)的值,可依次指定字典名和放在方括號內(nèi)的鍵怔揩,如下所示:
alien_0 = {'color': 'green'}
print(alien_0['color'])
這將返回字典alien_0
中與鍵color
相關(guān)聯(lián)的值:
green
字典中可包含任意數(shù)量的鍵—值對捉邢。例如,下面是最初的字典alien_0商膊,其中包含兩個鍵— 值對:
alien_0 = {'color': 'green', 'points': 5}
現(xiàn)在伏伐,你可以訪問外星人alien_0
的顏色和點數(shù)。如果玩家射殺了這個外星人晕拆,你就可以使用下面的代碼來確定玩家應(yīng)獲得多少個點:
alien_0 = {'color': 'green', 'points': 5}
new_points = alien_0['points']
print("You just earned " + str(new_points) + " points!")
上述代碼首先定義了一個字典藐翎,然后從這個字典中獲取與鍵points
相關(guān)聯(lián)的值,并將這個值存儲在變量new_points
中实幕。接下來吝镣,將這個整數(shù)轉(zhuǎn)換為字符串,并打印一條消息昆庇,指出玩家獲得了多少個點:
You just earned 5 points!
添加鍵—值對
字典是一種動態(tài)結(jié)構(gòu)末贾,可隨時在其中添加鍵—值對。要添加鍵—值對整吆,可依次指定字典名拱撵、用方括號括起的鍵和相關(guān)聯(lián)的值。
下面在字典alien_0
中添加兩項信息:
外星人的x坐標(biāo)和y坐標(biāo)表蝙,讓我們能夠在屏幕的特定位置顯示該外星人拴测。我們將這個外星人放在屏幕左邊緣,且離屏幕上邊緣25像素的地方府蛇。由于屏幕坐標(biāo)系的原點通常為左上角集索,因此要將該外星人放在屏幕左邊緣,可將x坐標(biāo)設(shè)置為0,要將該外星人放在離屏幕頂部25像素的地方抄谐,可將y坐標(biāo)設(shè)置為25,如下所示:
alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)
我們首先定義了前面一直在使用的字典扰法,然后打印這個字典蛹含,以顯示其信息快照。我們在這個字典中新增了一個鍵—值對塞颁,其中的鍵為x_position
浦箱,而值為0。接著我們重復(fù)這樣的操作祠锣,但使用的鍵為y_position
酷窥。打印修改后的字典時,將看到這兩個新增的鍵—值對:
{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5, 'y_position': 25, 'x_position': 0}
這個字典的最終版本包含四個鍵—值對伴网,其中原來的兩個指定外星人的顏色和點數(shù)蓬推,而新增的兩個指定位置。注意澡腾,鍵—值對的排列順序與添加順序不同沸伏。Python不關(guān)心鍵—值對的添加順序,而只關(guān)心鍵和值之間的關(guān)聯(lián)關(guān)系动分。
創(chuàng)建空字典
有時候毅糟,在空字典中添加鍵—值對是為了方便,而有時候必須這樣做澜公。為此姆另,可先使用一對空的花括號定義一個字典,再分行添加各個鍵—值對坟乾。例如迹辐,下例演示了如何以這種方式創(chuàng)建字典alien_0
:
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = 5
print(alien_0)
這里首先定義了空字典alien_0
,再在其中添加顏色和點數(shù)甚侣,得到前述示例一直在使用的字典:
{'color': 'green', 'points': 5}
使用字典來存儲用戶提供的數(shù)據(jù)或在編寫能自動生成大量鍵—值對的代碼時右核,通常都需要先定義一個空字典。
修改字典中的值
要修改字典中的值渺绒,可依次指定字典名贺喝、用方括號括起的鍵以及與該鍵相關(guān)聯(lián)的新值。
例如宗兼,假設(shè)隨著游戲的進(jìn)行躏鱼,需要將一個外星人從綠色改為黃色:
alien_0 = {'color': 'green'}
print("The alien is " + alien_0['color'] + ".")
alien_0['color'] = 'yellow'
print("The alien is now " + alien_0['color'] + ".")
我們首先定義了一個表示外星人alien_0
的字典,其中只包含這個外星人的顏色殷绍。接下來染苛,我們將與鍵color
相關(guān)聯(lián)的值改為yellow
。輸出表明,這個外星人確實從綠色變成了黃色:
The alien is green.
The alien is now yellow.
來看一個更有趣的例子茶行,對一個能夠以不同速度移動的外星人的位置進(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)
if alien_0['speed'] == 'slow':
x_increment = 1
elif alien_0['speed'] == 'medium':
x_increment = 2
else:
# 這個外星人的速度一定很快
x_increment = 3
# 新位置等于老位置加上增量
alien_0['x_position'] = alien_0['x_position'] + x_increment
print("New x-position: " + str(alien_0['x_position']))
我們首先定義了一個外星人畔师,其中包含初始的x坐標(biāo)和y坐標(biāo)娶靡,還有速度medium
。出于簡化考慮看锉,我們省略了顏色和點數(shù)姿锭,但即便包含這些鍵值對,這個示例的工作原理也不會有任何變化伯铣。我們還打印了x_position
的初始值呻此,這讓用戶知道這個外星人向右移動了多遠(yuǎn)。
然后腔寡,使用了一個if-elif-else
結(jié)構(gòu)來確定外星人應(yīng)向右移動多遠(yuǎn)焚鲜,并將這個值存儲在變量x_increment
中。如果外星人的速度為slow
放前,它將向右移動一個單位恃泪,如果速度為medium
,將向右移動兩個單位犀斋,如果為fast
贝乎,將向右移動三個單位。確定移動量后叽粹,將其與x_position
的當(dāng)前值相加览效,再將結(jié)果關(guān)聯(lián)到字典中的鍵x_position
。
由于這是一個速度中等的外星人虫几,因此其位置將向右移動兩個單位:
Original x-position: 0
New x-position: 2
通過修改外星人字典中的值锤灿,可改變外星人的行為。例如辆脸,要將這個速度中等的外星人變成速度很快的外星人但校,可添加如下代碼行:
alien_0['speed'] = fast
這樣,再次運(yùn)行這些代碼時啡氢,其中的if-elif-else
結(jié)構(gòu)將把一個更大的值賦給變量
x_increment
状囱。
刪除鍵—值對
對于字典中不再需要的信息,可使用del
語句將相應(yīng)的鍵—值對徹底刪除倘是。使用del
語句時亭枷,必須指定字典名和要刪除的鍵。
例如搀崭,下面的代碼從字典alien_0
中刪除鍵points
及其值:
alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
del alien_0['points']
print(alien_0)
上述代碼將鍵points
從字典alien_0
中刪除叨粘,同時刪除與這個鍵相關(guān)聯(lián)的值。輸出表明,鍵points
及其值5已從字典中刪除升敲,但其他鍵—值對不受影響:
{'color': 'green', 'points': 5}
{'color': 'green'}
遍歷字典
一個Python字典可能只包含幾個鍵—值對答倡,也可能包含數(shù)百萬個鍵—值對。鑒于字典可能包含大量的數(shù)據(jù)驴党,Python支持對字典遍歷瘪撇。字典可用于以各種方式存儲信息,因此有多種遍歷字典的方式鼻弧,可遍歷字典的所有鍵—值對设江、鍵或值锦茁。
遍歷所有的鍵—值對
探索各種遍歷方法前攘轩,先來看一個新字典,它用于存儲有關(guān)網(wǎng)站用戶的信息码俩。下面的字典存儲一名用戶的用戶名度帮、名和姓:
user_0 = {
'username':
'efermi',
'first':
'enrico',
'last':
'fermi',
}
我們可以使用一個for循環(huán)來遍歷這個字典:
for key, value in user_0.items():
print("\nKey: " + key)
print("Value: " + value)
要實現(xiàn)遍歷字典的for循環(huán),可聲明兩個變量稿存,用于存儲鍵—值對中的鍵和值笨篷。 對于這兩個變量,可使用任何名稱瓣履。下面的代碼使用了簡單的變量名率翅,這完全可行:
for k, v in user_0.items()
for語句的第二部分包含字典名和方法items()
,它返回一個鍵—值對列表袖迎。接下來冕臭,for循環(huán)依次將每個鍵—值對存儲到指定的兩個變量中。我們使用這兩個變量來打印每個鍵及其相關(guān)聯(lián)的值燕锥。第一條print
語句中的"\n"確保在輸出每個鍵—值對前都插入一個空行:
Key: last
Value: fermi
Key: first
Value: enrico
Key: username
Value: efermi
即便遍歷字典時辜贵,鍵—值對的返回順序也與存儲順序不同。Python不關(guān)心鍵—值對的存儲順序归形,而只跟蹤鍵和值之間的關(guān)聯(lián)關(guān)系托慨。
遍歷字典中的所有鍵
在不需要使用字典中的值時,方法keys()很有用暇榴。下面來遍歷字典favorite_languages
厚棵,并將每個被調(diào)查者的名字都打印出來:
favorite_languages = {'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python'}
for name in favorite_languages.keys():
print(name.title())
.keys()
方法提取字典favorite_languages
中的所有鍵,并依次將它們存儲到變量name
中蔼紧。輸出列出了每個被調(diào)查者的名字:
Jen
Sarah
Phil
Edward
遍歷字典時窟感,會默認(rèn)遍歷所有的鍵,因此歉井,如果將上述代碼中的for name in favorite_ languages.keys():
替換為for name in favorite_languages:
柿祈,輸出將不變。如果顯式地使用方法keys()
可讓代碼更容易理解,你可以選擇這樣做躏嚎,也可省略它蜜自。在這種循環(huán)中,可使用當(dāng)前鍵來訪問與之相關(guān)聯(lián)的值卢佣。
下面來打印兩條消息重荠,指出兩位朋友喜歡的語言。我們像前面一樣遍歷字典中的名字虚茶,但在名字為指定朋友的名字時戈鲁,打印一條消息,指出其喜歡的語言:
favorite_languages = { 'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python'}
friends = ['phil', 'sarah']
for name in favorite_languages.keys():
print(name.title())
if name in friends:
print(" Hi " + name.title() + ", I see your favorite language is " + favorite_languages[name].title() + "!")
我們創(chuàng)建了一個列表嘹叫,其中包含我們要通過打印消息婆殿,指出其喜歡的語言的朋友。 在循環(huán)中罩扇,我們打印每個人的名字婆芦,并檢查當(dāng)前的名字是否在列表friends中
。
如果在列表中喂饥,就打印一句特殊的問候語消约,其中包含這位朋友喜歡的語言。為訪問喜歡的語言员帮,我們使用了字典名或粮,并將變量name
的當(dāng)前值作為鍵。每個人的名字都會被打印捞高,但只對朋友打印特殊消息:
Jen
Sarah
Hi Sarah, I see your favorite language is C!
Edward
Phil
Hi Phil, I see your favorite language is Python!
按順序遍歷字典中的所有鍵
字典總是明確地記錄鍵和值之間的關(guān)聯(lián)關(guān)系氯材,但獲取字典的元素時,獲取順序是不可預(yù)測的棠枉。
要以特定的順序返回元素浓体,一種辦法是在for
循環(huán)中對返回的鍵進(jìn)行排序”惭龋可使用函數(shù)sorted()
來獲得按特定順序排列的鍵列表的副本:
favorite_languages = { 'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python'}
for name in sorted(favorite_languages.keys()):
print(name.title() + ", thank you for taking the poll.")
這個示例中命浴,對方法dictionary.keys()
的結(jié)果調(diào)用了函數(shù)sorted()
。 這讓Python列出字典中的所有鍵贱除,并在遍歷前對這個列表進(jìn)行排序生闲。輸出表明,按順序顯示了所有被調(diào)查者的名字:
Edward, thank you for taking the poll.
Jen, thank you for taking the poll.
Phil, thank you for taking the poll.
Sarah, thank you for taking the poll.
遍歷字典中的所有值
如果你只想知道字典包含的值月幌,可使用方法values()
碍讯,它返回一個值列表,而不包含任何鍵扯躺。
例如捉兴,如果我們想獲得一個這樣的列表蝎困,即其中只包含被調(diào)查者選擇的各種語言,而不包含被調(diào)查者的名字倍啥,可以這樣做:
favorite_languages = { 'jen': 'python','sarah': 'c', 'edward': 'ruby', 'phil': 'python'}
print("The following languages have been mentioned:")
for language in favorite_languages.values():
print(language.title())
這條for語句提取字典中的每個值禾乘,并將它們依次存儲到變量language
中。通過打印這些值虽缕,就獲得了一個列表始藕,其中包含被調(diào)查者選擇的各種語言:
The following languages have been mentioned:
Python
C
Python
Ruby
這種做法提取字典中所有的值,而沒有考慮是否重復(fù)氮趋。涉及的值很少時伍派,這也許不是問題,但如果被調(diào)查者很多剩胁,最終的列表可能包含大量的重復(fù)項诉植。為剔除重復(fù)項,我們可使用集合set
摧冀。 集合類似于列表倍踪,但每個元素都必須是獨一無二的:
favorite_languages = { 'jen': 'python',
'sarah': 'c', 'edward': 'ruby', 'phil': 'python', }
print("The following languages have been mentioned:")
for language in set(favorite_languages.values()):
print(language.title())
通過對包含重復(fù)元素的列表調(diào)用set()
系宫,可以幫我們找出列表中獨一無二的元素索昂,并使用這些元素來創(chuàng)建一個集合。我們使用了set()
來提取favorite_languages.values()
中不同的語言扩借。
結(jié)果是一個不重復(fù)的列表椒惨,其中列出了被調(diào)查者提及的所有語言:
The following languages have been mentioned:
Python
C
Ruby
嵌套
有時候,需要將一系列字典存儲在列表中潮罪,或?qū)⒘斜碜鳛橹荡鎯υ谧值渲锌底唬@稱為嵌套。你可以在列表中嵌套字典嫉到、在字典中嵌套列表甚至在字典中嵌套字典沃暗,嵌套是一項強(qiáng)大的功能。
字典列表
字典alien_0
包含一個外星人的各種信息何恶,但無法存儲第二個外星人的信息孽锥,更別說屏幕上全部外星人的信息了。如何管理成群結(jié)隊的外星人呢?一種辦法是創(chuàng)建一個外星人列表细层,其中每個外星人都是一個字典惜辑,包含有關(guān)該外星人的各種信息。
例如疫赎,下面的代碼創(chuàng)建一個包含三個外 星人的列表:
alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points': 15}
aliens = [alien_0, alien_1, alien_2]
for alien in aliens:
print(alien)
我們首先創(chuàng)建了三個字典盛撑,其中每個字典都表示一個外星人。我們將這些字典都放到一個名為aliens
的列表中捧搞。最后抵卫,我們遍歷這個列表狮荔,并將每個外星人都打印出來:
{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}
更符合現(xiàn)實的情形是,外星人不止三個介粘,且每個外星人都是使用代碼自動生成的轴合。在下面的示例中,我們使用range()
生成了30個外星人:
# 創(chuàng)建一個用于存儲外星人的空列表
aliens = []
# 創(chuàng)建30個綠色的外星人
for alien_number in range(30):
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
# 顯示前五個外星人
for alien in aliens[:5]:
print(alien)
# 顯示創(chuàng)建了多少個外星人
print("Total number of aliens: " + str(len(aliens)))
在這個示例中碗短,首先創(chuàng)建了一個空列表受葛,用于存儲接下來將創(chuàng)建的所有外星人。range()
返回一系列數(shù)字偎谁,其用途是告訴Python我們要重復(fù)這個循環(huán)多少次总滩。每次執(zhí)行這個循環(huán)時,都創(chuàng)建一個外星人巡雨,并將其附加到列表aliens
末尾闰渔。然后使用一個切片來打印前五個外星人,然后打印列表的長度铐望,以證明確實創(chuàng)建了30個外星人
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
Total number of aliens: 30
這些外星人都具有相同的特征冈涧,但在Python看來,每個外星人都是獨立的正蛙,這讓我們能夠獨立地修改每個外星人督弓。
在什么情況下需要處理成群結(jié)隊的外星人呢?想象一下乒验,可能隨著游戲的進(jìn)行愚隧,有些外星人會變色且移動速度會加快。必要時锻全,我們可以使用for
循環(huán)和if
語句來修改某些外星人的顏色狂塘。
例如,要將前三個外星人修改為黃色的鳄厌、速度為中等且值10個點燥爷,可以這樣做:
# 創(chuàng)建一個用于存儲外星人的空列表
aliens = []
# 創(chuàng)建30個綠色的外星人
for alien_number in range (0,30):
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
for alien in aliens[0:3]:
if alien['color'] == 'green':
alien['color'] = 'yellow'
alien['speed'] = 'medium'
alien['points'] = 10
# 顯示前五個外星人
for alien in aliens[0:5]:
print(alien)
由于我們要修改前三個外星人礁遣,需要遍歷一個只包含這些外星人的切片瓷炮。當(dāng)前咧七,所有外星人都是綠色的,但情況并非總是如此新思,因此我們編寫了一條if
語句來確保只修改綠色外星人窖梁。如果外星人是綠色的,我們就將其顏色改為yellow
夹囚,將其速度改為medium
纵刘,并將其點數(shù)改為10
, 如下面的輸出所示:
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
你可以進(jìn)一步擴(kuò)展這個循環(huán)荸哟,在其中添加一個elif
代碼塊假哎,將黃色外星人改為移動速度快且值15個點的紅色外星人瞬捕,如下所示(這里只列出了循環(huán),而沒有列出整個程序):
for alien in aliens[0:3]:
if alien['color'] == 'green':
alien['color'] = 'yellow'
alien['speed'] = 'medium'
alien['points'] = 10
elif alien['color'] == 'yellow':
alien['color'] = 'red'
alien['speed'] = 'fast'
alien['points'] = 15
在字典中存儲列表
有時候舵抹,需要將列表存儲在字典中肪虎,而不是將字典存儲在列表中。例如惧蛹,你如何描述顧客點的比薩呢?如果使用列表扇救,只能存儲要添加的比薩配料,但如果使用字典香嗓,就不僅可在其中包含配料列表迅腔,還可包含其他有關(guān)比薩的描述。
在下面的示例中靠娱,存儲了比薩的兩方面信息沧烈,外皮類型和配料列表。其中的配料列表是一個與鍵toppings
相關(guān)聯(lián)的值像云。要訪問該列表锌雀,我們使用字典名和鍵toppings
,就像訪問字典中的其他值一樣迅诬。這將返回一個配料列表腋逆,而不是單個值:
# 存儲所點比薩的信息
pizza = {
'crust': 'thick',
'toppings': ['mushrooms', 'extra cheese']}
# 概述所點的比薩
print("You ordered a " + pizza['crust'] + "-crust pizza " +
"with the following toppings:")
for topping in pizza['toppings']:
print("\t" + topping)
我們首先創(chuàng)建了一個字典,其中存儲了有關(guān)顧客所點比薩的信息百框。在這個字典中闲礼,一個鍵是crust
牍汹,與之相關(guān)聯(lián)的值是字符串thick
铐维,下一個鍵是toppings
,與之相關(guān)聯(lián)的值是一個列表慎菲,其中存儲了顧客要求添加的所有配料嫁蛇。制作前我們概述了顧客所點的比薩。為打印配料露该,我們編寫了一個for循環(huán)睬棚。為訪問配料列表,我們使用了鍵toppings
解幼,這樣Python將從字典中提取配料列表抑党。
下面的輸出概述了要制作的比薩:
You ordered a thick-crust pizza with the following toppings:
mushrooms
extra cheese
每當(dāng)需要在字典中將一個鍵關(guān)聯(lián)到多個值時,都可以在字典中嵌套一個列表撵摆。在前面有關(guān)喜歡的編程語言的示例中底靠,如果將每個人的回答都存儲在一個列表中,被調(diào)查者就可選擇多種喜歡的語言特铝。在這種情況下暑中,當(dāng)我們遍歷字典時壹瘟,與每個被調(diào)查者相關(guān)聯(lián)的都是一個語言列表,而不是一種語言鳄逾,因此稻轨,在遍歷該字典的for
循環(huán)中,我們需要再使用一個for
循環(huán)來遍歷與被調(diào)查者相關(guān)聯(lián)的語言列表:
favorite_languages = {'jen': ['python', 'ruby'],
'sarah': ['c'],
'edward': ['ruby', 'go'],
'phil': ['python', 'haskell'], }
for name, languages in favorite_languages.items():
print("\n" + name.title() + "'s favorite languages are:")
for language in languages:
print("\t" + language.title())
現(xiàn)在與每個名字相關(guān)聯(lián)的值都是一個列表雕凹。請注意殴俱,有些人喜歡的語言只有一種,而有些人有多種枚抵。遍歷字典時粱挡,我們使用了變量languages
來依次存儲字典中的每個值,因為我們知道這些值都是列表俄精。在遍歷字典的主循環(huán)中询筏,我們又使用了一個for
循環(huán)來遍歷每個人喜歡的語言列表。現(xiàn)在竖慧,每個人想列出多少種喜歡的語言都可以:
Jen's favorite languages are:
Python
Ruby
Sarah's favorite languages are:
C
Phil's favorite languages are:
Python
Haskell
Edward's favorite languages are:
Ruby
Go
在字典中存儲字典
可在字典中嵌套字典嫌套,但這樣做時,代碼可能很快復(fù)雜起來圾旨。例如踱讨,如果有多個網(wǎng)站用戶,每個都有獨特的用戶名砍的,可在字典中將用戶名作為鍵痹筛,然后將每位用戶的信息存儲在一個字典中,并將該字典作為與用戶名相關(guān)聯(lián)的值廓鞠。
在下面的程序中帚稠,對于每位用戶,我們都存儲了其三項信息:名床佳、姓和居住地滋早,為訪問這些信息,我們遍歷所有的用戶名砌们,并訪問與每個用戶名相關(guān)聯(lián)的信息字典:
users = {'aeinstein': {
'first': 'albert',
'last': 'einstein',
'location': 'princeton'},
'mcurie': {
'first': 'marie',
'last': 'curie',
'location': 'paris'}}
for username, user_info in users.items():
print("\nUsername: " + username)
full_name = user_info['first'] + " " + user_info['last']
location = user_info['location']
print("\tFull name: " + full_name.title())
print("\tLocation: " + location.title())
我們首先定義了一個名為users
的字典杆麸,其中包含兩個鍵:用戶名aeinstein
和mcurie
,與每個鍵相關(guān)聯(lián)的值都是一個字典浪感,其中包含用戶的名昔头、姓和居住地。我們先遍歷字典users
影兽,讓Python依次將每個鍵存儲在變量username
中揭斧,并依次將與當(dāng)前鍵相關(guān)聯(lián)的字典存儲在變量user_info
中。
在主循環(huán)內(nèi)部赢笨,我們將用戶名打印出來未蝌。接著我們開始訪問內(nèi)部的字典驮吱。變量user_info
包含用戶信息字典,而該字典包含三個鍵:first
萧吠、last
和location
左冬,對于每位用戶,我們都使用這些鍵來生成整潔的姓名和居住地纸型,然后打印有關(guān)用戶的簡要信息:
Username: aeinstein
Full name: Albert Einstein Location: Princeton
Username: mcurie
Full name: Marie Curie Location: Paris
小作業(yè)
11-1 請想出5個人的名字拇砰,并將這些名字用作字典中的鍵,想出每個人喜歡的一個數(shù)字狰腌,并將這些數(shù)字作為值存儲在字典中除破。打印每個人的名字和喜歡的數(shù)字。
11-2 創(chuàng)建一個字典琼腔,在其中存儲三條大河流及其流經(jīng)的國家瑰枫。其中一個鍵—值對可能是'nile':'egypt'。使用循環(huán)為每條河流打印一條消息丹莲,如"The Nile runs through Egypt."光坝。使用循環(huán)將該字典中每條河流的名字都打印出來。使用循環(huán)將該字典包含的每個國家的名字都打印出來甥材。
11-3 創(chuàng)建多個字典盯另,對于每個字典,都使用一個寵物的名稱來給它命名;在每個字典中洲赵,包含寵物的類型及其主人的名字鸳惯。將這些字典存儲在一個名為pets的列表中,再遍歷該列表叠萍,并將寵物的所有信息都打印出來芝发。
想查看作業(yè)答案可以去我的Githu倉庫在文件夾(11-1——11-3)