Python 为什么字典的键必须是不可变的

Python 为什么字典的键必须是不可变的

为了理解为什么字典键必须是不可变的,让我们将其与哈希表相关联。字典的哈希表实现使用从键值计算出的哈希值来查找键。如果键是可变对象,其值可能会发生变化,从而导致其哈希值也发生变化。

如上所述,由于不知道更改键对象的人无法得知它被用作字典键,它不能在字典中移动该条目。然后,

  • 当您尝试在字典中查找相同对象时,它将无法找到,因为其哈希值不同。

  • 如果尝试查找旧值,也无法找到,因为在哈希桶中找到的对象的值将不同。

如果你想要一个以列表为索引的字典,请按照以下步骤进行:

  • 将列表转换为元组
  • 函数tuple(myList)可以创建一个与列表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')}

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程