概述
我试图在python中创建某种散列标识符;我需要它来标识图中的节点。问题是有些节点具有不同的属性。如果这些节点的属性由属性到值的字典描述:
idA = {'type':'A', 'name':'a_100'}
idB = {'type':'B', 'name':'b_3', 'value':7}
我想要
__hash__()
和
__eq__()
使用元组对
((key1,value1), (key2,value2), ...)
.
字典是这方面的理想选择,因为我将相当频繁地检查这些属性,字典查找应该是有效的(我使用了许多标识符,每个标识符都有许多属性)。但是字典是不可散列的。
元组对的frozenset可以正确散列,但它对于查找是否有效?
如果我声明了一个空类,然后为它设置了属性,这就符合我的要求了(可能在幕后使用字典),但我不知道如何散列它。也许有某种方法可以散列它的成员值
inspect
或
dir()
?
class identifier():
pass
idA = identifier()
idA.type = 'A'
idA.name = 'a_100'
如果有一种方法可以使用基于元组对(attribute,value)的散列(and==运算符),那么这也可以做我想要的事情。
或者,是否有一些工作可以使等效数据类型满足此SAT类型类比:
frozenset
是为了
set
作为?是为了
dict
谢谢你的帮助。
编辑:
这是正确的方向吗?
class identifier(dict):
def to_frozenset(self):
return frozenset([(k,self[k]) for k in self])
def __hash__(self):
return hash(self.to_frozenset())
def __eq__(self, rhs):
return self.to_frozenset() == rhs.to_frozenset()
def __ne__(self, rhs):
return not self == rhs
这会改变计算复杂度,以便快速查找标识符属性,但缓慢地对标识符进行散列或检查两个标识符以获得相等性。如果有办法缓存它的散列(并且一旦缓存了散列就不允许更改它的字典),并且保证标识符类型的散列冲突很少(因此很少检查相等性),那么这可能是一个好的解决方案?告诉我你的想法!
最后
以上就是沉默黑猫为你收集整理的python可哈希的有哪些_Python中的一个可哈希的、灵活的标识符的全部内容,希望文章能够帮你解决python可哈希的有哪些_Python中的一个可哈希的、灵活的标识符所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复