相关疑难解决方法(0)

实现__hash __()的正确和好方法是什么?

什么是正确和好的实施方式__hash__()

我在谈论返回哈希码的函数,该哈希码随后用于将对象插入哈希表,即字典.

__hash__()返回一个整数并用于将对象"分箱"为哈希表时,我假设返回的整数的值应该为公共数据均匀分布(以最小化冲突).获得这些价值观的好习惯是什么?碰撞是一个问题吗?在我的例子中,我有一个小类,它充当一个容器类,包含一些int,一些浮点数和一个字符串.

python dictionary hashtable hashcode

126
推荐指数
4
解决办法
6万
查看次数

PyCharm可以自动生成__eq __()和__hash __()实现吗?

我是PyCharm新手,但是长期使用IntelliJ用户.在IntelliJ中,当您编写类定义时,IDE可以基于实例变量自动生成构造函数,equals()方法和hashCode()方法.这是好事,不仅对保存打字,但为了防止意外的错误,并在某些自动投掷equals()hashCode()最佳实践.

鉴于产品来自同一家公司,我希望PyCharm能做同样的事情.经过大量的谷歌搜索和搜索文档,我找不到任何东西__eq__()__hash__().当然,Python实例变量没有明确指定,但我希望生成器可以遵循一个约定,例如提供所有__init()__参数作为潜在的实例变量.至于__init__(),我发现了一些会自动添加实例变量设置的东西__init__(),但是这种方法似乎比单独输入更麻烦,而且它甚至不会将实例变量作为参数添加到__init__()签名中.

我是否遗漏了文档中的任何内容,或者可能有一个可以执行此操作的插件?

更新:要清楚,我正在寻找能够生成这些方法的实际实现的东西.也就是说,如果我有称为类Point和PyCharm知道我的学生都xy实例变量,那么它会自动生成该的__eq__()方法:

def __eq__(self, other):
    if not isinstance(other, Point):
        return NotImplemented
    elif self is other:
        return True
    else:
        return self.x == other.x and self.y == other.y
Run Code Online (Sandbox Code Playgroud)

在IntelliJ中可以轻松完成等效操作.

python intellij-idea pycharm

12
推荐指数
1
解决办法
5258
查看次数

NetworkX Graph对象的"同构"比较,而不是默认的"地址"比较

我想将NetworkX Graph对象用作Python中的键dict.但是,我不希望比较的默认行为(即,通过对象的地址).相反,我希望同构图指代是相同元素的关键dict.

这种行为是否已在某处实施?我找不到这个方向的任何信息.

如果我必须自己实施,以下评估是否现实?

  • networkx.Graph上课.
  • 定义__eq__它调用is_isomorphic.
  • __hash__以某种方式定义(欢迎建议).

我认为我必须使这个包装的Graph不可变,因为:

如果一个类定义了可变对象并实现了一个__eq__()方法,那么它就不应该实现__hash__(),因为hashable集合的实现要求一个键的哈希值是不可变的(如果对象的哈希值改变,它将在错误的哈希桶中).

python hash isomorphism networkx

5
推荐指数
1
解决办法
770
查看次数

Python哈希函数

在python中散列层次结构(类似于文件结构)的好方法是什么?

我可以将整个层次结构转换为虚线字符串,然后将其哈希,但有没有更好(或更有效)的方式来做到这一点,而不是一直来回?

我可能想要散列的结构示例如下:

a -> b1 -> c -> 1 -> d
a -> b2 -> c -> 2 -> d
a -> c -> 1 -> d
Run Code Online (Sandbox Code Playgroud)

python hash

0
推荐指数
1
解决办法
3815
查看次数