我基本上想要将Python对象转换为固定长度的数字(不是字母数字)值。一种方式,我想出来的是,
import random
x = Car(brand='toyota', model='corolla', price='10000', year=1997)
random.seed(x)
random.random()
0.13436424411240122
random.seed(x)
random.random()
0.13436424411240122
我想知道是否有更方便和通用的方式(或库)来使这项工作?
答案 0 :(得分:1)
def convertObjectIntoFixedLengthNumeric(obj):
return 17
x = Car(brand='toyota', model='corolla', price='10000', year=1997)
convertObjectIntoFixedLengthNumeric(x)
17
非常方便和通用。如果不是您想要的,请提供更多信息..
答案 1 :(得分:1)
您现在使用的方式是:
Car
对象中的拼写错误。random.seed()
,那就很脆弱。另外,如果我是你,我想对我的号码生成方式有一点控制。
其他答案已经向您展示了hashlib
的存在。
我可能会这样使用它:
class Car:
# ...
def __hash__(self):
md5 = hashlib.md5()
for i in ('brand', 'model', 'price', 'year'):
attr = getattr(self, i)
md5.update(str(attr).lowercase())
return int(md5.hexdigest(), 16)
关于整数转换的参考:Convert 32-char md5 string to integer。
答案 2 :(得分:0)
您可能需要查看内置的id
-function。它返回一个对象的内存地址,它始终是唯一的,只要你不比较已经垃圾回收的对象的id。
答案 3 :(得分:0)
获取您关心的所有属性并对其进行哈希处理。
class Car(...):
...
def __hash__(self):
return hash((self.brand, self.model, self.price, self.year))
...
print hash(x)
答案 4 :(得分:0)
你在谈论hash function。我认为您需要提供更多信息,以获得有用的答案。