使用散列函数作为python中字典中的键

时间:2013-07-14 06:52:44

标签: python python-3.x

我有一个我正在创建的项目(在python 3.3中),我试图弄清楚是否有一种有效(或更漂亮的方式)来执行以下操作。

我有一个提取二进制/十六进制字符串的函数,如下所示(比特组仅用于示例目的)

  • 0000 1111 0002 0001
  • 0000 1111 0003 0001
  • 0000 1111 0002 0002
  • 0000 1110 0002 0001

现在,我想要做的是能够将它们传递给一个函数,然后根据第二组位中的值和第四组位(即操作码)将它们激发到一个方法中 例如;一个哈希函数,它将检查(* 1111 * 0001)是否匹配,然后返回与这些位相关的函数。

我有使用哈希表字典的想法,但是我不完全确定如何将密钥作为掩码。

虽然我可以用键11110001创建一个字典,并且我想要返回的函数值,然后只是连接并传入[4:8] [12:16]会有效,我想知道是否有为密钥创建哈希函数的方法。 (如果这是有意义的)没有进入类并重写哈希函数然后传递它。

也许某种形式的数据结构存储正则表达式密钥并在任何有效输入上执行它? - 虽然我可以创造一个我想知道是否有某种形式的内置功能我缺少(只是所以我不重新发明轮子)

希望这是有道理的! 谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

大概你实际上是在使用示例中的位值,所以为什么不从字典派生一个字典,该字典有一个新方法getmasked,它在查找之前屏蔽该值...

答案 1 :(得分:0)

绝对没有理由避免使用__hash____eq__来实现一个小课程。字典确实支持自定义哈希函数,这就是这样做的方法:

KEY_MASK = 0xf0f0  # or whichever mask you need

class Key(object):
    __slots__ = 'num',
    def __init__(self, num):
        self.num = num
    def __hash__(self):
        return hash(self.num & KEY_MASK)
    def __eq__(self, other):
        return self.num & KEY_MASK == other.num & KEY_MASK
    def __ne__(self, other):
        return not self == other