字典可存儲的信息量幾乎不受限制,理解字典後,你就能夠更准確地為各種真實物體建模。可以創建一個表示人的字典,想在其中存儲多少信息就存儲多少信息:姓名、年齡、地址、職業以及要描述的任何方面。
在 Python 中,字典是一系列鍵值對。每個鍵都與一個值相關聯,你可以使用鍵來訪問與之相關聯的值。與鍵相關聯的值可以是數字、字符串、列表乃至字典。事實上,可將任何 Python 對象用作字典中的值。
#簡單例子
alien_0 = {
'color': 'green', 'points': 5} #字典用放在花括號{}中的一系列鍵—值對表示
#在這個字典中,字符串'color' 是一個鍵,與之相關聯的值為'green'
print(alien_0['color'])
print(alien_0['points'])
alien_0 = {
'color': 'green', 'points': 5}
#要獲取與鍵相關聯的值,可依次指定字典名和放在方括號內的鍵
print(alien_0['color']) #返回green
字典是一種動態結構,可隨時在其中添加鍵—值對。要添加鍵—值對,可依次指定字典名、用方括號括起的鍵和相關聯的值。
alien_0 = {
'color': 'green', 'points': 5}
print(alien_0)
alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)
注意:鍵值對的排列順序與添加順序不同。Python 不關心鍵值對的添加順序,而只關心鍵和值之間的關聯關系。注意:鍵值對的排列順序與添加順序不同。Python 不關心鍵值對的添加順序,而只關心鍵和值之間的關聯關系。
alien_0 = {
'color': 'green'}
alien_0['color'] = 'red' #改成紅色
print("The alien is now " + alien_0['color'] + ".")
對於字典中不再需要的信息,可使用 del 語句將相應的鍵值對徹底刪除。使用 del 語句時,必須指定字典名和要刪除的鍵。
alien_0 = {
'color': 'green', 'points': 5}
del alien_0['color']
print(alien_0)
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print("Sarah's favorite language is " + favorite_languages['sarah'].title() + ".")
languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for k,v in languages.items():
print('\nKey:' + k)
print('Value:' + v)
注意:遍歷字典時,鍵值對的返回順序也與存儲順序不同。
languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for k in languages.keys():
#for k in languages: #結果一樣
print(k.title())
字典總是明確地記錄鍵和值之間的關聯關系,但獲取字典的元素時,獲取順序是不可預測的。可使用函數 sorted() 來獲得按特定順序排列的鍵列表的副本。
languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for k in sorted(languages):
print(k.title())
languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for v in languages.values():
print(v.title())
這種做法提取字典中所有的值,而沒有考慮是否重復。
為剔除重復項,可使用集合(set)。集合類似於列表,但每個元素都必須是獨一無二的。
languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for v in set(languages.values()):
print(v.title())
將一系列字典存儲在列表中,或將列表作為值存儲在字典中,這稱為嵌套。
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)
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())
注意:列表和字典的嵌套層級不應太多。如果嵌套層級比前面的示例多得多,很可能有更簡單的解決問題的方案。
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())