面试题答案
一键面试- 可作为字典键的类型:
- 不可变类型:如整数(
int
)、浮点数(float
)、字符串(str
)、元组(tuple
,且元组内元素也必须是不可变类型)。这是因为字典在存储键值对时,需要根据键来计算哈希值以确定存储位置,不可变类型在创建后其值不会改变,哈希值也固定,能保证在字典操作过程中通过键准确找到对应的值。 - 示例:
- 不可变类型:如整数(
my_dict = {1: 'one', 'name': 'John', (1, 2): 'pair'}
print(my_dict)
- 不可作为字典键的类型:
- 可变类型:如列表(
list
)、集合(set
)、字典(dict
)。因为可变类型的值可以改变,改变后哈希值也会改变,这就导致在字典中无法通过该键准确找到对应的值。 - 示例:
- 可变类型:如列表(
try:
bad_dict = {[1, 2]: 'bad_key'}
except TypeError as e:
print(f"错误原因: {e}")
错误原因通常为 unhashable type: 'list'
,表明列表这种不可哈希(即不可作为字典键)的类型被尝试用作字典键了。