【发布时间】:2014-05-09 06:22:39
【问题描述】:
为什么我不能使用列表作为字典键?
hlst 是一个列表。 备忘录是一个字典。
if not hlst in memo:
# do something
else:
configurations = memo[hlst]
当我尝试它时,python 告诉我 hlist 是不可散列的。
【问题讨论】:
-
不知道你在问什么。你的问题不清楚。
-
如果
hlst是一个列表,它不可能在字典中。那你为什么要检查? (如果您想将列表添加到字典中,请先将其转换为元组,使用tuple(hlst):只需确保始终将任何其他值转换为元组,然后再将其用作键或检查其存在) -
不能附加字典,如果这就是你的意思。也许您想将字典附加到列表中?
-
其实是个好问题。我已经对其进行了重新表述以使其更清晰。您不能将列表用作键,因为列表是可变的。由于它们是可变的,它们不能是可散列的(如字符串和元组)。假设
hlist = ['a']。想想如果将 hlist 的内容更改为 ['b'] 会发生什么。memo[['a']]会返回什么? -
列表是可变的。字典要求键是不可变的,这样键,即键的哈希值,保持不变。将其转换为元组或字符串表示形式。或者,如果列表很大,请尝试其他一些实现。查看stackoverflow.com/questions/2671211/…
标签: python list dictionary hash