在Python中,可以作为字典(dict)的key的对象必须满足以下条件:
1. 具有不可变性:这意味着一旦创建,对象的值不能被改变。
2. 具有`__hash__`方法:该方法用于计算对象的哈希值,字典的key需要能够被哈希,以便快速定位和检索。
3. 具有`__eq__`方法:该方法用于比较两个对象是否相等,字典的key需要能够被比较,以便在查找时判断是否匹配。
Python内置的不可变类型,如整数(int)、浮点数(float)、字符串(str)和组(tuple,其中不包含列表或字典),都可以作为字典的key。此外,自定义的不可变类型,只要实现了`__hash__`和`__eq__`方法,也可以作为字典的key。
数值类型(int、float)
字符串类型(str)
完全不可变的组(tuple)
自定义的不可变类(只要实现了`__hash__`和`__eq__`方法)
class Rule(object):
def __init__(self, path, methods):
self.path = path
self.methods = tuple(methods) 确保组是不可变的
def __hash__(self):
return hash((self.path, self.methods))
def __eq__(self, other):
if isinstance(other, Rule):
return self.path == other.path and self.methods == other.methods
return False
创建字典并使用Rule对象作为key
rules_dict = {Rule('/path1', ['GET', 'POST']): 'handler1', Rule('/path2', ['GET']): 'handler2'}
需要注意的是,列表(list)和字典(dict)是不可用作字典key的,因为它们是可变的,且没有实现`__hash__`方法。同样,集合(set)也不能作为字典的key,因为集合也是可变的
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://sigusoft.com/bj/124257.html