介紹
字典是Python內建的映射類型。字典將鍵映射到值,這些鍵-值對提供了一種在Python中存儲數據的有用方式。
通常用於保存相關的數據,例如ID或用戶配置文件中包含的信息,字典用花括號構造在兩側{
}
。
信息:要跟隨本教程中的示例代碼,請在本地系統上運行python3
命令以打開Python交互式外殼。然後,您可以將示例代碼添加到>>>
提示之後,以便進行複製、粘貼或編輯。
A dictionary looks like this:
除了花括號之外,字典中還有冒號(:
)。
冒號左邊的詞是鍵。 鍵可以由任何不可變數據類型組成。上面字典中的鍵是:
'username'
'online'
'followers'
上面示例中的每個鍵都是字符串值。
冒號右邊的詞是值。 值可以由任何數據類型組成。上面字典中的值是:
'sammy-shark'
True
987
讓我們打印出字典sammy
:
Output{'username': 'sammy-shark', 'followers': 987, 'online': True}
查看輸出,鍵值對的順序可能已經變化。在Python 3.5及更早版本中,字典數據類型是無序的。但是,在Python 3.6及更高版本中,字典數據類型保持有序。無論字典是否有序,鍵值對都將保持不變,使我們能夠根據它們的關聯意義訪問數據。
先決條件
您應該已經安裝了Python 3並在您的計算機或服務器上設置了編程環境。如果您尚未設置編程環境,您可以參考適用於您的操作系統(Ubuntu、CentOS、Debian等)的本地編程環境或您的服務器上的編程環境的安裝和設置指南。
訪問字典元素
我們可以通過引用相關鍵來調用字典的值。
使用鍵訪問數據項
因為字典提供了用於存儲數據的鍵值對,它們可以是Python程序中的重要元素。
如果我們想要隔離Sammy的用戶名,我們可以通過調用sammy['username']
來實現。讓我們打印出來:
Outputsammy-shark
字典的行為類似於數據庫,因為您不是通過調用整數來獲取特定索引值,而是將值分配給鍵並可以調用該鍵來獲取其相關值。
通過調用鍵'username'
,我們獲得該鍵的值,即'sammy-shark'
。
同樣,可以使用相同的格式調用sammy
字典中的其餘值:
通過利用字典的鍵值對,我們可以引用鍵來檢索值。
使用方法訪問元素
除了使用鍵訪問值之外,我們還可以使用一些內置方法來處理:
dict.keys()
獨立鍵dict.values()
獨立值dict.items()
返回一個列表格式的(key, value)
元組對
要返回鍵,我們將使用 dict.keys()
方法。在我們的示例中,這將使用變量名稱並為 sammy.keys()
。讓我們將其傳遞給 print()
方法並查看輸出:
Outputdict_keys(['followers', 'username', 'online'])
我們收到的輸出將鍵放置在 dict_keys
類的可迭代視圖對象中。然後將鍵以列表格式打印。
此方法可用於查詢多個字典。例如,我們可以查看兩個字典數據結構之間共享的常見鍵:
字典 sammy
和字典 jesse
分別是用戶配置文件字典。
他們的配置文件具有不同的鍵,因為 Sammy 有一個帶有相關追隨者的社交配置文件,而 Jesse 則有一個帶有相關點數的遊戲配置文件。當我們運行此小程序時,我們可以找到它們共有的 2 個鍵是 username
和 online
狀態:
Outputsammy-shark JOctopus
True False
我們肯定可以改進這個程序,使輸出更易讀,但這說明了dict.keys()
可以用來檢查各種字典之間的共同之處或不同之處。對於大型字典來說,這尤其有用。
同樣地,我們可以使用dict.values()
方法來查詢sammy
字典中的值,這將被構造為sammy.values()
。讓我們打印出來:
Outputdict_values([True, 'sammy-shark', 987])
這兩種方法keys()
和values()
都返回sammy
字典中存在的鍵和值的未排序列表,分別帶有dict_keys
和dict_values
的視圖對象。
Outputdict_items([('online', True), ('username', 'sammy-shark'), ('followers', 987)])
如果我們對字典中的所有項目都感興趣,我們可以使用items()
方法訪問它們:
返回的格式是由(key, value)
元組對組成的列表,帶有dict_items
的視圖對象。
Outputonline is the key for the value True
followers is the key for the value 987
username is the key for the value sammy-shark
上面的for
循環遍歷了sammy
字典中的項目,並逐行打印出鍵和值,並提供了使其更易於人類理解的信息。
我們可以使用內置方法從字典數據結構中訪問項目、值和鍵。
修改字典
字典是一种可变数据结构,因此您可以修改它们。在本节中,我们将讨论如何添加和删除字典元素。
添加和更改字典元素
不使用方法或函数,您可以使用以下语法向字典添加键值对:
我们将通过向名为usernames
的字典添加一个键值对来查看实际操作:
Output{'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}
现在我们看到字典已经更新为'Drew': 'squidly'
键值对。由于字典可能是无序的,因此该对可能出现在字典输出的任何位置。如果我们在程序文件中稍后使用usernames
字典,它将包含额外的键值对。
此外,此语法还可用于修改分配给键的值。在这种情况下,我们将引用现有键并将不同的值传递给它。
讓我們考慮一個字典drew
,它是給定網絡上的一個用戶之一。我們會說,這個用戶今天的粉絲增加了,所以我們需要更新傳遞給'followers'
鍵的整數值。我們將使用print()
函數來檢查該字典是否已修改。
Output{'username': 'squidly', 'followers': 342, 'online': True}
在輸出中,我們看到粉絲的數量從整數值305
跳躍到342
。
我們可以使用這種方法來向字典添加帶有用戶輸入的鍵-值對。讓我們編寫一個快速程序usernames.py
,在命令行上運行,並允許來自用戶的輸入以添加更多名稱和相關的用戶名:
讓我們在命令行上運行該程序:
當我們運行程序時,我們會得到以下類似的輸出:
OutputEnter a name:
Sammy
sammy-shark is the username of Sammy
Enter a name:
Jesse
I don't have Jesse's username, what is it?
JOctopus
Data updated.
Enter a name:
當我們測試完程序後,可以按下CTRL + C
來退出程序。您可以設置一個觸發器來退出程序(例如輸入字母q
),並使用條件語句來改進代碼。
這顯示了您如何互動修改字典。對於這個特定的程序,一旦您使用CTRL + C
退出程序,除非您實現了一種方式來處理讀寫文件,否則您將丟失所有數據。
我們還可以使用dict.update()
方法添加和修改字典。這與列表中可用的append()
方法有所不同。
在下面的jesse
字典中,讓我們添加鍵'followers'
並給它一個整數值,使用jesse.update()
。之後,讓我們print()
更新後的字典。
Output{'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}
從輸出中,我們可以看到我們成功將'followers': 481
鍵值對添加到字典jesse
中。
我們也可以使用dict.update()
方法來修改現有的鍵值對,通過為特定鍵替換給定值。
讓我們將 Sammy 的在線狀態從 True
改為 False
在 sammy
字典中:
Output{'username': 'sammy-shark', 'followers': 987, 'online': False}
這行 sammy.update({'online': False})
引用現有鍵 'online'
,並將其布林值從 True
修改為 False
。當我們調用 print()
函數列印字典時,我們可以看到更新在輸出中生效。
要向字典添加項目或修改值,我們可以使用 dict[key] = value
語法或方法 dict.update()
。
刪除字典元素
就像您可以向字典數據類型添加鍵值對並更改值一樣,您也可以刪除字典內的項目。
要從字典中刪除鍵值對,我們將使用以下語法:
讓我們以代表其中一位用戶的 jesse
字典為例。我們會說 Jesse 不再使用在線平台玩遊戲,所以我們會刪除與 'points'
鍵關聯的項目。然後,我們將列印該字典以確認項目已被刪除:
Output{'online': False, 'username': 'JOctopus', 'followers': 481}
這行 del jesse['points']
從 jesse
字典中刪除了鍵值對 'points': 723
。
如果我們想清空字典中的所有值,我們可以使用dict.clear()
方法來實現。這將保留給定的字典,以防我們稍後在程序中需要使用它,但它將不再包含任何項目。
讓我們刪除jesse
字典中的所有項目:
Output{}
輸出顯示我們現在有一個空字典,不包含任何鍵值對。
如果我們不再需要特定的字典,我們可以使用del
完全刪除它:
在刪除jesse
字典後運行print()
時,我們將收到以下錯誤:
Output...
NameError: name 'jesse' is not defined
因為字典是可變的數據類型,所以可以添加、修改和刪除和清除項目。
結論
本教程介紹了Python中的字典數據結構。字典由鍵值對組成,並提供了一種存儲數據的方式,而不依賴於索引。這使我們可以根據數據的含義和與其他數據類型的關係檢索值。
從這裡,您可以在我們的“理解數據類型”教程中學習更多關於其他數據類型的知識。
你可以在程式設計專案中看到字典資料型態的使用,例如使用 Scrapy 進行網頁抓取。
Source:
https://www.digitalocean.com/community/tutorials/understanding-dictionaries-in-python-3