python中字典的key值不允许的数据类型

 2026-04-11  阅读 276  评论 0

摘要:在 Python 中,字典的 key 必须是一个不可变(immutable)且可哈希(hashable) 的数据类型。以下数据类型 不允许 作为字典的 key:
❌ 不允许作为字典 key 的类型:

在 Python 中,字典的 key 必须是一个不可变(immutable)且可哈希(hashable) 的数据类型。以下数据类型 不允许 作为字典的 key:

python中字典的key值不允许的数据类型

❌ 不允许作为字典 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__` 方法的类实例)。

✅ 允许作为字典 key 的类型:

1. 不可变基础类型

  • 整数(`int`)
  • 浮点数(`float`)
  • 字符串(`str`)
  • 布尔值(`bool`)
  • `None`
  • 2. 不可变容器类型

  • 元组(`tuple`),但要求元组内的元素也必须是不可变的。
  • python

    d = {(1, 2, "a"): "valid"} 合法

    d = {(1, [2, 3]): "invalid"} 报错: 元组包含列表(可变元素)

  • 冻结*(`frozenset`)
  • python

    d = {frozenset({1, 2}): "valid"} 合法

    3. 特殊类型

  • `bytes`(不可变字节序列)
  • python

    d = {b"hello": "valid"} 合法

    关键原因:可哈希性(Hashability)

    字典的 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删除,添加请注明来意。

    原文链接:https://www.6g9.cn/qwsh/dd1aaAD5WUFZQBg.html

    发表评论:

    管理员

    • 内容125303
    • 积分0
    • 金币0
    关于我们
    知妳网是一个专注于知识成长与生活品质的温暖社区,致力于提供情感共鸣、实用资讯与贴心服务。在这里,妳可以找到相关的知识、专业的建议,以及提升自我的优质内容。无论是职场困惑、情感心事,还是时尚美妆、健康生活,知妳网都能精准匹配妳的需求,陪伴妳的每一步成长。因为懂妳,所以更贴心——知妳网,做妳最知心的伙伴!
    联系方式
    电话:
    地址:广东省中山市
    Email:admin@qq.com

    Copyright © 2022 知妳网 Inc. 保留所有权利。 Powered by

    页面耗时0.0371秒, 内存占用1.7 MB, 访问数据库19次