为什么 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')}
广告