python字典key不能是可以是啥类型

  • Post category:Python

Python字典的key类型是有限制的,简单来说key的类型必须是不可变对象,如字符串、数字、元组等,不能是可变对象,如列表、集合、字典等可变对象。

原因是:Python中字典使用哈希表来实现,在创建字典时,对于每一个key会根据哈希算法计算出一个哈希值,通过哈希值来进行快速定位和查找,从而提高字典的访问效率。而可变对象是可以修改的,一旦被修改之后哈希值就会发生变化,从而破坏了哈希表的特性,导致字典无法正常工作。

以下是两个示例说明:

  • 例1:使用字符串作为key
# 创建一个字典,key为字符串类型
person = {'name': 'Tom', 'age': 25, 'gender': 'Male'}

# 输出字典内容
print(person)

# 输出每一个键值对
for key, value in person.items():
    print(key, value)

输出结果为:

{'name': 'Tom', 'age': 25, 'gender': 'Male'}
name Tom
age 25
gender Male

可以看出,使用字符串作为key是完全没有问题的,我们可以正常读取key对应的value。

  • 例2:使用列表作为key
# 创建一个字典,key为列表
person_list = {['name', 'age', 'gender']: ['Tom', 25, 'Male']}

# 输出字典内容
print(person_list)

# 输出每一个键值对
for key, value in person_list.items():
    print(key, value)

输出结果为:

TypeError: unhashable type: 'list'

由于列表是可变对象,不能作为字典的key,所以我们得到了TypeError异常。如果非要使用列表作为key,可以考虑使用元组,元组是不可变对象,可以作为字典的key,示例如下:

# 创建一个字典,key为元组类型
person_tuple = {('name', 'age', 'gender'): ['Tom', 25, 'Male']}

# 输出字典内容
print(person_tuple)

# 输出每一个键值对
for key, value in person_tuple.items():
    print(key, value)

输出结果为:

{('name', 'age', 'gender'): ['Tom', 25, 'Male']}
('name', 'age', 'gender') ['Tom', 25, 'Male']

通过使用元组作为key,可以正常读取key对应的value。