為什麼 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')}

更新日期:2022 年 9 月 19 日

1K+ 瀏覽

開啟你的 事業

透過完成課程獲得認證

開始
廣告
© . All rights reserved.