我是靠谱客的博主 沉默黑猫,最近开发中收集的这篇文章主要介绍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

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

最后

以上就是沉默黑猫为你收集整理的python可哈希的有哪些_Python中的一个可哈希的、灵活的标识符的全部内容,希望文章能够帮你解决python可哈希的有哪些_Python中的一个可哈希的、灵活的标识符所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部