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

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

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

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

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

  • 如果您尝试查找旧值,则也不会找到,因为在哈希桶中找到的对象的值会发生变化。

如果您想要使用列表索引的字典,请按照以下步骤操作 –

  • 将列表转换为元组
  • 函数tuple(myList)创建一个与列表myList具有相同条目的元组。
  • 元组是不可变的,因此可以用作字典键。

阅读更多:Python 教程

将列表转换为元组

样例

要将列表转换为元组,请使用tuple() –

# 创建列表
mylist = ["Jacob", "Harry", "Mark", "Anthony"]

# 显示列表
print("列表 = ",mylist)

# 将列表转换为元组
res = tuple(mylist)
print("元组 = ",res)

产量

列表 = ['Jacob', 'Harry', 'Mark', 'Anthony']
元组 = ('Jacob', 'Harry', 'Mark', 'Anthony')

元组作为键

样例

现在,我们将看到一个示例,其中首先将列表转换为元组,然后将元组设置为键 –

# 创建列表
mylist = ["Jacob", "Harry", "Mark", "Anthony"]

# 显示列表
print("列表 = ",mylist)

# 将列表转换为元组
res = tuple(mylist)
print("元组 = ",res)
dct = {2:"num","demo":"string"}
print("字典 = ")
print(dct)

# 用元组覆盖现有值
dct[2]=res
print("\n更新的字典(元组作为键)...")
print(dct)

产量

('列表 = ', ['Jacob', 'Harry', 'Mark', 'Anthony'])
('元组 = ', ('Jacob', 'Harry', 'Mark', 'Anthony'))
字典 = 
{'demo': 'string', 2: 'num'}

更新的字典(元组作为键)...
{'demo': 'string', 2: ('Jacob', 'Harry', 'Mark', 'Anthony')}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程