为什么在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')}
极客教程