相关疑难解决方法(0)

使用常规编码器使对象JSON可序列化

JSON序列化自定义非可序列化对象的常规方法是子类化json.JSONEncoder,然后将自定义编码器传递给转储.

它通常看起来像这样:

class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, foo):
            return obj.to_json()

        return json.JSONEncoder.default(self, obj)

print json.dumps(obj, cls = CustomEncoder)
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的是使用默认编码器进行序列化.我环顾四周但找不到任何东西.我的想法是编码器会看到一些字段来确定json编码.类似的东西__str__.也许是一个__json__领域.在python中有这样的东西吗?

我想制作一个模块的类,我正在使用JSON序列化给使用该软件包的每个人,而不必担心实现他们自己的[普通]自定义编码器.

python serialization json monkeypatching

59
推荐指数
3
解决办法
6万
查看次数

为任意对象创建哈希?

我一直在使用pickle.dumps以便为任意Python对象创建哈希,但是,我发现dict/set命令不是规范化的,因此结果是不可靠的.

在SO和其他地方几个 相关的 问题,但我似乎找不到使用相同基础进行相等(/ 结果)的哈希算法.我理解滚动自己的基本要求,但显然我更喜欢使用经过测试的东西.__getstate____dict__

这样的图书馆存在吗?我想我实际要求的是一个确定性地序列化对象的库(使用__getstate____dict__),这样我就可以对输出进行散列.

编辑

为了澄清,我正在寻找与Python hash(或__hash__)返回的值不同的东西.我想要的本质上是任意对象的校验和,可能是也可能不是.该值应根据对象的状态而变化.(我正在使用"状态"来指代由其重新调整的字典,__getstate__或者,如果不存在,则指对象的__dict__.)

python

7
推荐指数
1
解决办法
2212
查看次数

python的hash()可移植吗?

python的hash函数可移植吗?

我所说的“可移植”是指,它会在Python版本、平台和实现中返回相同的结果(对于相同的数据)吗?

如果没有,是否有任何替代方案可以提供此类功能(同时仍然能够对常见数据结构进行哈希处理)?


该文档并不是特别有帮助。 这个问题指的是一个似乎推出自己版本的库,但我不确定不可移植性是其原因。

python hash portability cross-platform

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

python中的确定性递归散列

Python 3 的默认散列函数不是确定性的(hash(None) 因运行而异),甚至没有尽最大努力以高概率生成唯一 id(hash(-1)==hash( -2) 是真的)。

是否有其他一些散列函数可以很好地作为校验和(即两个数据结构散列到相同值的概率可以忽略不计,并且每次运行 python 都返回相同的结果),并且支持所有 python 的内置数据类型,包括无?

理想情况下,它将在标准库中。我可以腌制对象或获取字符串表示,但这似乎不必要,并且浮点数的字符串表示可能是非常糟糕的校验和。

我在标准库中找到了加密哈希 (md5,sha256),但它们只对字节串进行操作。

Haskell 似乎在他们的标准库中得到了这个 ~ 几乎是正确的......但是“Nothing::Maybe Int”和 0 都散列到 0,所以它也不完美。

python hash

4
推荐指数
1
解决办法
1623
查看次数

如何计算 unicode 字典的 MD5 校验和?

我在 python 中有一个字典,其中包含 unicode 值。我想计算这本字典的 md5 总和。我尝试使用这个问题的答案:Computing an md5 hash of a data structure

import hashlib
import bencode
data = {'unicode_text': '????'}
data_md5 = hashlib.md5(bencode.bencode(data)).hexdigest()
print data_md5
Run Code Online (Sandbox Code Playgroud)

但问题是bencode返回此错误:

KeyError: <type 'unicode'>
Run Code Online (Sandbox Code Playgroud)

python unicode dictionary python-unicode

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