在将bytearray添加为字典的键时,我收到此错误:
TypeError: unhashable type: 'bytearray'
以下是代码:
str_dict = {}
s = bytearray(10)
for x in range(0, 10):
value = get_str(s)
str_dict[s] = value
所以我创建了一个bytearray,函数get_str(s)更新了s并返回一个'value'。我想将值和更新的s添加到字典中。我得到了上述错误。
答案 0 :(得分:5)
{[1, 2, 3]: 1}
TypeError: unhashable type: 'list'
dict键必须是不可变类型。
List或bytearray不能用作密钥,因为它们是可变的,因此它们不能是唯一的,因为它们可以被更改。
似乎如果一个对象作为__hash__
方法,它可以用作关键字:
I'm able to use a mutable object as a dictionary key in python. Is this not disallowed?
答案 1 :(得分:1)
不可用/不可变对象不能用作键,因为在将它们放入映射后可能找不到它们: - )
x = [1, 2]
# suppose this works
mapping = {x: "this is x"}
# change x
x.append(3)
考虑如何实际实现映射(哈希桶),我们(可能)现在在错误的桶中有一个密钥([1, 2, 3]
的桶中[1, 2]
。我们从不会找到它。
您可以创建string
,或使用tuple
(两者都是不可变的)并将其用作键。