Python 哈希以派生唯一ID
在数据集中,如果观察的唯一性是由所述属性的共现性派生出来的,则散列观察(一行)的两个属性的唯一ID是否是为观察创建唯一ID的正确方法 数据示例如下所示:Python 哈希以派生唯一ID,python,hash,unique-id,Python,Hash,Unique Id,在数据集中,如果观察的唯一性是由所述属性的共现性派生出来的,则散列观察(一行)的两个属性的唯一ID是否是为观察创建唯一ID的正确方法 数据示例如下所示: scenario_id procedure_spvid 0 2986 114374 1 2986 114660 2 2986 128564 3 2986 125072 scenario_id:
scenario_id procedure_spvid
0 2986 114374
1 2986 114660
2 2986 128564
3 2986 125072
scenario_id:
min, max: 25, 5100306
count unique: 2629
procedure_spvid:
min, max: 2, 9000057
count unique: 1163
但是,ID不连续,即不存在5100306场景
在Python中,我对数据集所做的是:
hex(hash((scenario_id,procedure_spvid)))
散列的目的不是保证唯一性,而是当您需要的“证据”大于您必须存储它的空间时,提供合理的唯一性概率 存储唯一的
(sid,pid)
对的唯一唯一方法是通过字符串、元组等将它们相互嫁接。但是如果sid
和pid
都是4个字节,则至少需要8个字节来实现这一点。如果只想使用4个字节,可以使用4个字节的哈希值(sid,pid)
——但是由于您将超过4个字节的可能选项装配到4个字节中,因此存在一定的重复可能性。从数学上讲,这被称为
如果您使用的是数据库,可能有一种方法可以指定一个包含这两个列的列,以便它们一起为行的其余部分提供主键。如果您使用的是正确语言的哈希表(例如pythondict
),那么该数据结构将跟踪重复的哈希,并适应它们,以便它们不会返回相同的值
如果您正在使用哈希,并且自己管理它,那么您必须接受冲突的可能性
如果不特别查看您的数据集,我们无法真正解决您可能会看到重复哈希的原因。通常,“哈希”和“唯一”是不兼容的。无论多小,复制的可能性总是存在的。我不能说你的特殊情况是否是那条规则的例外。你需要提供一个更具体的例子。包括你的ID的大小,ID的数量,以及散列的范围。是的,我认为可能有重复的可能性。我用统计数据更新了我的问题。如果你能分享我如何确定散列是否唯一的基本知识,我将不胜感激。或者另一种方法更好。你用散列做什么?您最好只使用
(scenario\u id,procedure\u spvid)
元组的最终目标是标记重复的观察(行)。关于场景id和程序spvid的副本。我现在还不想丢掉重复的东西。我需要向利益相关者显示数据的当前状态,为每个唯一的场景过程对提供唯一的ID可能会有所帮助。如果需要隐藏(s,p)对的值,并且希望使用函数而不是(ID,s,p)表,则需要了解伪随机置换(PRP)是什么如果嫁接的意思是连接成一个字符串,那么我的想法是可能会创建两个相同的ID,例如[12,3]=123和[1,23]=123。作为一个元组,它会看起来像'12,3'吗?我希望有一个没有逗号的更标准的格式。连接将是一种方法。简单地将整数字节彼此相邻(例如,从两个4字节整数中形成一个8字节整数)将是另一种情况,尽管这是一种特定于语言的事情。理想情况下,您可以按照已经存储的方式将其存储为2元组,否则,使用单个分隔符进行字符串连接就可以了。