使用哈希类python打印出哈希(字典)

时间:2014-04-09 20:08:41

标签: python class dictionary hash

我有一个在python中创建哈希类的赋值,用于在包含限制酶的文本文件上实现,第一列中的序列和第二列中的RE名称。目标是创建一个随机的6bp序列,通过打印出相应的酶名称来查看它是否存在于文本文件中。我可以只使用列表,并将其转换为字典,并使用get()来检索相应的酶名称,但是我必须创建一个类。

这是哈希类和随机序列生成器(粘贴时可能会出现缩进错误):

class KeyValue:
    def __init__(self,key,value):
        self.key=key
        self.value=value
    def __str__(self):
        return str(self.key)+":"+str(self.value)
class HashTable:

    def __init__(self, SIZE):
        i=0
        self.list=[]
        for i in range(SIZE):
            self.list.append([])
            i=i+1
        self.SIZE = len(self.list)

    def getValue(self,key):
        h = self.hash(key)
        bucket = self.list[h]
        for kv in bucket:
            if kv.key==key:
                return kv.value
    def setValue(self,key,value):
        h = self.hash(key)
        # should search first so we don't put key in twice, but for now ignore
        self.list[h].append(KeyValue(key,value))

    def hash(self, key):
        i=0
        total=0
        while i<len(key):
            total = total+ord(key[i])
            i=i+1
        return total % self.SIZE

def random_DNA(length):
    return ''.join(random.choice('ATCG') for _ in xrange(length))

以下是用于导入模块的代码:

from HashTable import *

fh = open("restriction_enzymes.txt", "r")

num_lines = int(sum(1 for line in fh))

print num_lines

hashtable = HashTable(int(num_lines))

for line in fh:
    (key, value) = line.strip().split('t')
    hashtable.setValue(key, value)

print hashtable

DNA = random_DNA(6)
print DNA
print hastable.getValue(DNA)
print hashtable.getValue('AACGTT')

首先,我希望能够打印出哈希表。我希望能够将字典可视化。试图用线条&#34;打印哈希表&#34;在它创建之后,我得到输出:&#34; HashTable.HashTable实例位于0x7ff53555db90&#34;,我想这是内存中的位置?我是否必须在HashTable类中实现 str repr 函数?有人可以协助吗?

关于程序的主要输出,如果我把变量DNA,随机序列,输入&#34;打印hashtable.getValue(DNA)&#34;,我得到&#34;无& #34 ;.好的,所以随机seq不在那里。所以,我尝试复制并粘贴文本文件中的第一个seq&#39; AACGTT&#39;这对应于RE AclI。但是,我仍然得到输出&#34;无&#34;。任何人都有任何想法,我在这里做错了吗?

文本文件中的所有seq标识符长度为4,6或8 bp。由于随机序列是6,如果它的4或8和6 bp seq匹配4或8中的某个位置,是否使用哈希函数知道拉它?或者我应该实现一个函数来尝试根据核苷酸匹配来拉它?

感谢所有帮助。最好的。

0 个答案:

没有答案