这是一个有趣的问题:给定大量文本数据(约5 GB的单词作为字符串),我需要构建一个映射,使每个单词都与一个唯一的整数相关联。应该注意的是,它需要以另一种方式工作-每个整数还应该与一个唯一的单词相关联(因此,为什么它是双射映射)。
我还需要能够通过单词的相关编号快速查找单词。
以下是我能想到的最幼稚的实现:
data_structure = []
for word in giant_list_of_words:
if (word not in data_structure):
data_structure.append(word)
return data_structure
def lookup(data_structure,i):
return data_structure[i]
使用这种方法,映射只是将单词映射到列表中的索引。构建映射很慢,但是查找很快。
这是另一种方法:
def mapping():
data_structure = {}
count = 0
for word in giant_list_of_words:
if (word not in data_structure):
data_structure[word] = count
count += 1
return data_structure
def lookup(data_structure,i):
retval = ''
for key in data_structure:
if (data_structure[key] == i):
retval = key
break
return retval
构建速度很快,但索引编制却很慢。有什么想法吗?