如何在Python中为大数据创建哈希表?

3

我正在进行一个项目,其中我要读取多达250000个或更多的列表项,并将它们的每个条目转换为哈希表中的键。

sample_key = open("sample_file.txt").readlines()
sample_counter = [0] * (len(sample_key))
sample_hash = {sample.replace('\n', ''):counter for sample, counter in zip(sample_key, sample_counter)}

len(sample_key)在1000-2000的范围内时,此代码运行良好。超出这个范围,它将简单忽略任何进一步的数据处理。

有什么建议可以处理这么大的列表数据吗?

PS:如果有一种最佳的方法来执行此任务(如直接作为哈希键条目读取),请提出建议。我是Python新手。


1
没有代码原因说明为什么这不能适用于更长的长度。也许你的程序会耗尽内存,如果相关项目不够小的话? - Amber
1
据我所知,Python 字典作为哈希表运作。 - Mr. E
4
那么它只是忽略继续处理任何其他数据。计算机会怎么做呢?它会说“不,不想这样做”吗?会出现异常吗?在字典中不再添加值,或者在字典中放入的值无法检索,或者速度比预期慢吗? - tobias_k
@tobias_k 我在调试器中看到了这个!没有异常,没有警告或错误。所以我说它只是被忽略了。 :) - kishoredbn
2
我的猜测是一些行是相同的,你的字典推导式覆盖了先前插入的键。你知道字典中的键是唯一的吗?此外,我不太确定你想达到什么目的,但我认为你可能会对collections.Counter感兴趣。 - tobias_k
显示剩余5条评论
1个回答

6

您的文本文件可能存在重复项,这些重复项将覆盖字典中现有的键(Python 中哈希表的名称)。您可以创建一个唯一的键集,然后使用字典推导式填充字典。

sample_file.txt

a
b
c
c

Python代码

with open("sample_file.txt") as f:
    keys = set(line.strip() for line in f.readlines())
my_dict = {key: 1 for key in keys if key}
>>> my_dict
{'a': 1, 'b': 1, 'c': 1}

这里是一个包含100万个随机10位字母的实现。时间相对较短,不到半秒。

import string
import numpy as np

letter_map = {n: letter for n, letter in enumerate(string.ascii_lowercase, 1)}
long_alpha_list = ["".join([letter_map[number] for number in row]) + "\n" 
                   for row in np.random.random_integers(1, 26, (1000000, 10))]
>>> long_alpha_list[:5]
['mfeeidurfc\n',
 'njbfzpunzi\n',
 'yrazcjnegf\n',
 'wpuxpaqhhs\n',
 'fpncybprrn\n']

>>> len(long_alpha_list)
1000000

# Write list to file.
with open('sample_file.txt', 'wb') as f:
    f.writelines(long_alpha_list)

# Read them back into a dictionary per the method above.
with open("sample_file.txt") as f:
    keys = set(line.strip() for line in f.readlines())

>>> %%timeit -n 10
>>> my_dict = {key: 1 for key in keys if key}

10 loops, best of 3: 379 ms per loop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接