为什么 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+ 浏览

开启你的 事业

通过完成课程获得认证

开始
广告