将bytearray添加为字典的键

时间:2015-08-30 23:16:42

标签: python dictionary

在将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添加到字典中。我得到了上述错误。

2 个答案:

答案 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(两者都是不可变的)并将其用作键。