python - 重复散列任意 Python 元组

标签 python hash

我正在编写一个专门的单元测试工具,它需要保存测试结果以便将来进行比较。因此,我需要能够始终如一地将传递给每个测试的参数映射到使用每个版本的这些参数运行测试函数的测试结果。我希望有一种方法可以对元组进行哈希处理,并使用该哈希来命名我存储测试结果的文件。

我的第一个冲动是在参数元组上调用 hash(),但当然这行不通,因为 hash 现在在解释器实例之间是随机的。

我很难想出一种适用于元组中可能存在的任意元素的方法(我想将其限制为整数、 float 、字符串和这三者的列表\元组的混合好好地)。有什么想法吗?

我想过使用元组的 repr 或对其进行酸洗,但不能保证 repr 对相同的输入产生逐字节相同的输出,我不认为酸洗是(是吗?)

我看过 this已经,但是答案都是基于不再成立的相同假设,并且无论如何都不会真正转化为这个问题,很多讨论都是关于使散列不依赖于出现的订单项目,我这样做希望散列取决于顺序。

最佳答案

不确定我是否完全理解您的问题,但会试一试。

在进行散列之前,只需将结果序列化为 JSON 字符串,然后对您的 JSON 字符串进行散列计算。

params = (1, 3, 2)
hashlib.sha224(json.dumps(params)).hexdigest()
# '5f0f7a621e6f420002d54ee28b0c169b8112ef72d8a6b60e6a25171c'

如果您的参数是字典,请使用 sort_keys=True 来确保您的键已排序。

params = {'b': 123, 'c': 345}
hashlib.sha224(json.dumps(params, sort_keys=True)).hexdigest()
# '2e75966ce3f1185cbfb4eccc49d5552c08cfb7502a8765fe1dce9303'

关于python - 重复散列任意 Python 元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48513058/

相关文章:

python - 在 python 中按名称对 .txt 文件进行排序

Python FTP服务器: How do I support both secure and insecure

java - HashSet - 确保早期对象持久化

python - 逐行阅读 .txt 单词列表时如何获得正确的哈希值?

php - 验证散列密码的长度(注册)php

regex - 我可以从一组散列键构建 Perl 正则表达式吗

python - 如何使用 beautifulsoup 打印 <a>...</a> 标签之间写入的文本并将另一个属性与该文本关联

python - 检测按键但仅一次。键盘模块无法以这种方式工作

ajax - 使用 URL 哈希保留 Ajax 页面状态

python - 为存在的元素绘制两个向量 - 即跳过没有条目的行