Python 哈希以派生唯一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:

在数据集中,如果观察的唯一性是由所述属性的共现性派生出来的,则散列观察(一行)的两个属性的唯一ID是否是为观察创建唯一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个字节中,因此存在一定的重复可能性。从数学上讲,这被称为

如果您使用的是数据库,可能有一种方法可以指定一个包含这两个列的列,以便它们一起为行的其余部分提供主键。如果您使用的是正确语言的哈希表(例如python
dict
),那么该数据结构将跟踪重复的哈希,并适应它们,以便它们不会返回相同的值

如果您正在使用哈希,并且自己管理它,那么您必须接受冲突的可能性


如果不特别查看您的数据集,我们无法真正解决您可能会看到重复哈希的原因。

通常,“哈希”和“唯一”是不兼容的。无论多小,复制的可能性总是存在的。我不能说你的特殊情况是否是那条规则的例外。你需要提供一个更具体的例子。包括你的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元组,否则,使用单个分隔符进行字符串连接就可以了。