为任意对象创建哈希?

2023-11-21

我一直在使用pickle.dumps然而,为了为任意 Python 对象创建哈希,我发现 dict/set 顺序未规范化,因此结果不可靠。

several related 问题上 SO 和别处,但我似乎找不到使用相同的相等基础的哈希算法(__getstate__/__dict__结果)。我了解自己推出的基本要求,但显然我更喜欢使用经过测试的东西。

这样的图书馆存在吗?我想我实际上要求的是一个确定性地序列化对象的库(使用__getstate__ and __dict__)这样我就可以对输出进行哈希处理。

EDIT

为了澄清一下,我正在寻找与 Python 返回的值不同的东西hash (or __hash__)。我想要的本质上是任意对象的校验和,这些对象可能是可散列的,也可能不是可散列的。该值应根据对象的状态而变化。 (我使用“状态”来指代由__getstate__或者,如果不存在,则该对象的__dict__.)


我想到可以扩展 Pickler 并覆盖选择函数以规范化必要的类型,所以这就是我正在做的事情。它看起来是这样的:

from copy import copy
from pickle import Pickler, MARK, DICT
from types import DictionaryType


class CanonicalizingPickler(Pickler):
    dispatch = copy(Pickler.dispatch)

    def save_set(self, obj):
        rv = obj.__reduce_ex__(0)
        rv = (rv[0], (sorted(rv[1][0]),), rv[2])
        self.save_reduce(obj=obj, *rv)

    dispatch[set] = save_set

    def save_dict(self, obj):
        write = self.write
        write(MARK + DICT)

        self.memoize(obj)
        self._batch_setitems(sorted(obj.iteritems()))

    dispatch[DictionaryType] = save_dict
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为任意对象创建哈希? 的相关文章

随机推荐

  • OpenCV 结构化边缘检测器的模型文件

    OpenCV实现结构化边缘检测基于基于随机森林的方法概述 用于快速边缘检测的结构化森林 2013 作者 P Doll r 和 C Zitnick 作者已发表Matlab 的实现还有一个用于Python 两者还包含基于 BSDS500 数据集
  • i18n 用于选择框

    我有一个名为 Role 的模型 我正在表单中使用下面的助手 有没有办法将 name 属性的值更改为另一种语言 语言环境 de yml de role admin something editor something something 在模
  • 请求的纹理大小 [0x0] 无效。当我在浏览器中加载图像时出错

    调用预测函数时浏览器中的 Tensorflow js 错误 我正在使用 Node js 来运行 web 应用程序 这是我包含的脚本 我正在 Chrome 中运行 Node js 但无法解决该错误 该项目有 7 个类作为输出 是形状为 1x7
  • 在 C# 中使用 REF 和 OUT 关键字进行按引用传递与按值传递

    到目前为止我的理解如下 价值传递 按值传递意味着传递参数的副本 对该副本的更改不会更改原始版本 通过参考 通过引用传递意味着传递对原始内容的引用 对引用的更改会影响原始引用 参考关键字 REF 告诉编译器该对象在进入函数之前已初始化 REF
  • 如何处理列表推导式中的异常?

    我在 Python 中有一些列表理解 其中每次迭代都可能抛出异常 例如 如果我有 eggs 1 3 0 3 2 1 egg for egg in eggs 我会得到一个ZeroDivisionError第三个元素例外 如何处理此异常并继续执
  • HTML5 Colspan - 替代方案[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我在 HTML 的 td 标签之一中使用 colspan 我不想在 HTML 中使用 c
  • 带有外部 .jar 的 Java 命令行

    我使用 jar 开发一个项目来重用代码 所以我有一个名为 TOOLS jar 的 jar 并且我在文件 HelloWorld java 中开发了一个简单的应用程序 该应用程序从 TOOLS jar 引用我的包 TOOLS 我用这个命令行编译
  • python 输入 UnicodeDecodeError:

    蟒蛇3 x gt gt gt a input hope gt gt gt a hope gt gt gt b input h pe gt gt gt b h pe gt gt gt c input start typing h delete
  • 全局作用域与全局命名空间

    我看到了这两个短语的用法 全局范围和全局名称空间 它们之间有什么区别 在 C 中 每个名称都有其作用域 超出该作用域就不存在 范围可以通过多种方式定义 它可以通过以下方式定义名称空间 功能 classes并且只是 因此 全局或其他命名空间定
  • 旋转分类散景图的小刻度标签

    我正在尝试轮换专业 和短轴在 Bokeh 的多类别图中 类似于对主要刻度标签所做的操作 here并在 matplotlib 中完成here 当有多个类别时 它们的标签 文本经常会混淆在一起 从中汲取一些灵感有关分类数据的 Bokeh 文档结
  • 将字符串转换为整数[重复]

    这个问题在这里已经有答案了 可能的重复 如何将 String 转换为 Int Hi 我在将字符串转换为整数时遇到以下问题 string str line Substring 0 1 This picks an integer at offs
  • 上传文件时出现错误“无法处理部件,因为未提供多部件配置”[重复]

    这个问题在这里已经有答案了 我试图通过 JSP 文件中的表单上传文件 但收到此错误 Servlet 已经具有 MultipartConfig 表示法 我正在使用 servlet 3 0 和 apache tomcat 8 错误信息 java
  • CSS 在容器内旋转元素

    如果你看一下 http jsfiddle net KA4dz 在此演示中 您可以清楚地看到内部元素由于旋转而到达外部元素的外部 请求是缩小内部元素 同时保持纵横比和中心位置 使其适合其容器 用例是用户可以手动旋转这样的内部元件 同时确保其保
  • 如何在 Linux 上将 googleTest 设置为共享库

    Debian 不再为 gTest 提供任何预编译包 他们建议您将该框架集成到项目的 makefile 中 但我想保持我的 makefile 干净 如何像以前的版本 在开始之前 请确保您已阅读并理解这篇来自谷歌的注释 本教程使 gtest 的
  • 在 Dynamics 2011 中调用对话框并向其传递多个 recordID

    我希望允许用户从联系人实体中选择一个或多个联系人 然后启动一个接受记录 ID 的对话框 这个想法是向联系人添加一些自定义配置 我目前在功能区按钮上有一个自定义操作 可以启动一个对话框 但它只接受一个记录 ID 我可以访问所选记录 ID 的列
  • 如何在 Razor 中定义方法?

    如何在 Razor 中定义方法 暂且不谈任何关于何时 如果有的话 应该完成的争论 功能就是你如何做 functions Add code here
  • VBA:将多个值传递给 Instr

    现在 我有一长串用户通过表单提交的 行业 值 我编写了一个宏 它将搜索这些值中的特定术语 并粘贴符合我的 可接受 行业值的小得多的列表的值 重点是将用户提交的所有当前行业值重新分类到我现有的分类法中 这是我的 If Then 语句目前的样子
  • 如何使用动态查询插入表变量?

    我尝试使用临时表开发此存储过程 但这不起作用 因此我改用表变量 我需要对表变量执行临时动态查询 然后使用该表变量执行最终查询 问题是我收到错误 必须声明标量变量 clms 我假设 Exec 没有表变量的范围 DECLARE qry nvar
  • 使用 python urllib 从 url 下载图像但收到 HTTP 错误 403: Forbidden

    我想使用 python 模块 urllib request 从 url 下载图像文件 该模块适用于某些网站 例如 mangastream com 但不适用于另一个网站 mangadoom co 接收错误 HTTP 错误 403 禁止 后一种
  • 为任意对象创建哈希?

    我一直在使用pickle dumps然而 为了为任意 Python 对象创建哈希 我发现 dict set 顺序未规范化 因此结果不可靠 有several related 问题上 SO 和别处 但我似乎找不到使用相同的相等基础的哈希算法 g