在 Python 中,字典的 key 必须是一个不可变(immutable)且可哈希(hashable) 的数据类型。以下数据类型 不允许 作为字典的 key:
1. 列表(List)
python
d = {[1, 2]: "value"} 报错: TypeError: unhashable type: 'list'
2. 字典(Dictionary)
python
d = {{"a": 1}: "value"} 报错: TypeError: unhashable type: 'dict'
3. *(Set)
python
d = {{1, 2}: "value"} 报错: TypeError: unhashable type: 'set'
4. 字节数组(Bytearray)
python
d = {bytearray(b"abc"): "value"} 报错: TypeError: unhashable type: 'bytearray'
5. 其他可变类型
任何自定义的可变对象(未正确实现 `__hash__` 方法的类实例)。
1. 不可变基础类型
2. 不可变容器类型
python
d = {(1, 2, "a"): "valid"} 合法
d = {(1, [2, 3]): "invalid"} 报错: 元组包含列表(可变元素)
python
d = {frozenset({1, 2}): "valid"} 合法
3. 特殊类型
python
d = {b"hello": "valid"} 合法
字典的 key 需要通过哈希函数计算唯一标识(哈希值),而 可变对象无法保证哈希值不变。例如,如果使用列表作为 key,当列表内容被修改后,哈希值会改变,导致字典无*确检索数据。
python
尝试用列表作为 key(报错)
invalid_key = {[1, 2]: "value"} TypeError: unhashable type: 'list'
正确使用元组作为 key
valid_key = {(1, 2): "value"} 成功
如果需要用“类似列表”的结构作为 key,可以将其转换为元组:
python
my_list = [1, 2, 3]
d = {tuple(my_list): "value"} 合法
字典的 key 必须满足 不可变 + 可哈希,避免使用列表、字典、*等可变类型。
版权声明: 知妳网保留所有权利,部分内容为网络收集,如有侵权,请联系QQ793061840删除,添加请注明来意。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态
