為什麼 Python 中字典鍵必須是不可變的?
要理解為什麼字典鍵必須不可變,讓我們把它與雜湊表聯絡起來。字典的雜湊表實現使用從鍵值計算出的雜湊值來查詢鍵。如果說鍵是一個可變物件,它的值可能會改變,因此它的雜湊值也可能會改變。
顧名思義,由於無論是誰改變了鍵物件都不能知道它正在被用作字典鍵,因此無法在字典中移動條目。
當您嘗試在字典中查詢相同的物件時,將找不到它,因為它的雜湊值不同。
如果你嘗試查詢舊值,也找不到,因為在該雜湊倉中找到的物件的值將不同。
如果你想要用一個列表索引字典,請遵循以下步驟 -
- 首先將列表轉換成元組
- 函式 tuple(myList) 建立一個型別為 tuple 的元組,其條目與列表 myList 中的相同。
- 元組是不可變的,因此可以用作字典鍵。
將列表轉換為元組
例
要將列表轉換為元組,可以使用 tuple() -
# Creating a List mylist = ["Jacob", "Harry", "Mark", "Anthony"] # Displaying the List print("List = ",mylist) # Convert List to Tuple res = tuple(mylist) print("Tuple = ",res)
輸出
List = ['Jacob', 'Harry', 'Mark', 'Anthony']
Tuple = ('Jacob', 'Harry', 'Mark', 'Anthony')
元組作為鍵
例
現在,我們將看到一個示例,其中我們首先將列表轉換為元組,然後將元組設定為鍵 -
# Creating a List mylist = ["Jacob", "Harry", "Mark", "Anthony"] # Displaying the List print("List = ",mylist) # Convert List to Tuple res = tuple(mylist) print("Tuple = ",res) dct = {2:"num","demo":"string"} print("Dictionary = ") print(dct) # Overwrite existing value with a tuple dct[2]=res print("\nUpdated Dictionary (Tuple as Key)...") print(dct)
輸出
('List = ', ['Jacob', 'Harry', 'Mark', 'Anthony'])
('Tuple = ', ('Jacob', 'Harry', 'Mark', 'Anthony'))
Dictionary =
{'demo': 'string', 2: 'num'}
Updated Dictionary (Tuple as Key)...
{'demo': 'string', 2: ('Jacob', 'Harry', 'Mark', 'Anthony')}
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP