📅  最后修改于: 2023-12-03 14:46:29.802000             🧑  作者: Mango
在Python字典中,我们可以使用任何不可变对象作为键,包括数字、字符串和元组。但是,当我们尝试使用可变对象,如列表或字典作为键时,会引发TypeError异常。
那么,如果我们希望使用可变对象作为键,该怎么办呢?
在这种情况下,K 模就是好的解决方案。K 模指的是哈希函数中的键K值,它是不可变的。因此,使用哈希函数生成的哈希值可以映射到相同的键,即使它们是可变对象也可以。
下面是一个简单的例子:
# 不使用 K 模的示例
d = {}
d[[1,2,3]] = "value" # TypeError: unhashable type: 'list'
# 使用 K 模的示例
d = {}
d[tuple([1,2,3])] = "value"
d # 输出 {(1, 2, 3): 'value'}
在这个例子中,我们尝试将一个列表作为键添加到字典中。当我们使用不可变元组时,代码不会引发TypeError异常,并成功将键/值对添加到字典中。
K 模的另一个例子是使用Python的collections模块中的namedtuple()函数。namedtuple()函数返回一个新的tuple子类,它具有字段名称,可以像字典一样进行访问和使用。由于namedtuple()函数返回一个元组,它是不可变的,因此可以作为字典中的键使用。
下面是一个用于展示K模与namedtuple()函数一起使用的示例:
from collections import namedtuple
# 使用 namedtuple
Point = namedtuple('Point', ['x', 'y'])
d = {}
d[Point(1, 2)] = "value"
d # 返回 {Point(x=1, y=2): 'value'}
在这个例子中,我们创建了一个具有x和y字段的新类型point。我们然后在一个字典中使用point的实例作为键,并将一个值与它关联。
总结:
在Python字典中,我们可以使用任何不可变对象作为键,包括数字、字符串和元组。K 模指的是哈希函数中的键K值,它是不可变的。我们可以使用K模解决这个问题,以便我们可以使用可变对象作为字典中的键。