我有一个问题,我要生成一个随机字典,可能有很多种可能性(比如说,我有25000个不同的字典)。我想为每一个可能性生成一个标识符,一个ID。我的要求是:
据我了解,这种方法在大多数情况下应该是有效的,但根据字典的实际内容和键,不排除两个不同的字典产生相同的 ID 的可能性。例如,如果我没有对键进行哈希处理并且两个不同的条目可以是“1.0”,那么就可能会出现问题。
你有什么建议吗?希望这些建议不要依赖于运气。
编辑:我添加了更大的代码,基本上是一个随机参数优化。 在 pastebin 上的代码。
- 如果两个字典的每个键都具有完全相同的值,则它们的ID相同
- 如果两个字典具有不同的ID,则它们的内容必须至少有一个差异。
- ID在每次运行程序时保持不变(
id(x)
无效) - 额外要求:ID在Python的不同版本(2.6、2.7、3.4、3.6)中保持不变
我的当前想法是使用哈希函数(尽管我对此知之甚少),并执行以下操作(假设有一个整数/浮点数字典):
import hashlib
def getID(mydic):
ID = 0
for x in mydic.keys():
# Hash the content
ID = ID + int(hashlib.sha256(str(mydic[x]).encode('utf-8')).hexdigest(), 16)
# Hash the key
ID = ID + int(hashlib.sha256(x.encode('utf-8')).hexdigest(), 16)
return (ID % 10**10)
据我了解,这种方法在大多数情况下应该是有效的,但根据字典的实际内容和键,不排除两个不同的字典产生相同的 ID 的可能性。例如,如果我没有对键进行哈希处理并且两个不同的条目可以是“1.0”,那么就可能会出现问题。
你有什么建议吗?希望这些建议不要依赖于运气。
编辑:我添加了更大的代码,基本上是一个随机参数优化。 在 pastebin 上的代码。