出于缓存目的,我需要从dict中存在的GET参数生成缓存键.
目前我正在使用sha1(repr(sorted(my_dict.items())))(sha1()是一种在内部使用hashlib的便捷方法),但我很好奇是否有更好的方法.
我一直在使用pickle.dumps以便为任意Python对象创建哈希,但是,我发现dict/set命令不是规范化的,因此结果是不可靠的.
在SO和其他地方有几个 相关的 问题,但我似乎找不到使用相同基础进行相等(/ 结果)的哈希算法.我理解滚动自己的基本要求,但显然我更喜欢使用经过测试的东西.__getstate____dict__
这样的图书馆存在吗?我想我实际要求的是一个确定性地序列化对象的库(使用__getstate__和__dict__),这样我就可以对输出进行散列.
编辑
为了澄清,我正在寻找与Python hash(或__hash__)返回的值不同的东西.我想要的本质上是任意对象的校验和,可能是也可能不是.该值应根据对象的状态而变化.(我正在使用"状态"来指代由其重新调整的字典,__getstate__或者,如果不存在,则指对象的__dict__.)
[Python 3.1]
我正在尝试为容器创建一个哈希,其中可能有嵌套容器,深度未知.在层次结构的所有级别,只有内置类型.有什么好办法呢?
为什么我需要它:
我在一个pickle对象(在磁盘上)缓存一些计算的结果.如果使用不同的参数调用该函数,我将需要使该缓存的文件无效(这种情况很少发生,因此我不打算将多个文件保存到磁盘).哈希将用于比较参数.