python可哈希的有哪些_Python中的一个可哈希的、灵活的标识符

我试图在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

这会改变计算复杂度,以便快速查找标识符属性,但缓慢地对标识符进行散列或检查两个标识符以获得相等性。如果有办法缓存它的散列(并且一旦缓存了散列就不允许更改它的字典),并且保证标识符类型的散列冲突很少(因此很少检查相等性),那么这可能是一个好的解决方案?告诉我你的想法!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值