字典,集合或冻结?

时间:2013-11-16 07:42:54

标签: python dictionary hash set

我有大量数据,大约1000万条目,我的部分程序需要很多会员资格检查......

if a in data:
    return True
return False

现在我将数据作为字典条目,其所有值都等于'1'

我还有一个使用算法来计算相同信息的程序,但是现在它比字典方法慢,但是我希望数据的大小能够继续增长......

对于我目前的词典解决方案,将(数据)键入为冻结集,或设置(或其他?)更快?

为了将来找到我需要切换到我的程序的时间,是否有人知道检查成员资格的速度如何与增加可清洗类型的大小相关联? 有10亿条目的词典还快吗?

3 个答案:

答案 0 :(得分:6)

在校长

如果您希望数据不断增长,则无法使用冻结集。

如果一个元素存在于其中,则一个集合将小于字典存储,以便进行测试。它的速度与字典查找速度相似,因为一组的键和项目都经过哈希处理以便存储并且始终是唯一的。如果您不需要与用户名关联的数据,请使用集合。

实际上......

当您处理许多条目时,会将数据移至数据库。您最终将耗尽内存,尝试将所有内容存储并读入内存。使用数据库,您可以发出特定查询来检查成员资格。认真。将该数据放入数据库中。

答案 1 :(得分:2)

散列中每个条目有几个字节开销(字典或集合没有太大区别),因此对于数十亿条目,您将遇到交换,除非您有32 + Gb内存用于应用。我会开始寻找快速的数据库

对于freezeset,您还需要在创建时以可接受的形式将所有数据存储在内存中,这可能会使所需的内存量翻倍

答案 2 :(得分:2)

对于这个数据量,RyPeck是对的 - 数据库可以更好地完成工作。

还有一点: 你写的东西对我来说似乎很奇怪: 如果使用字典存储成员资格的对象,字典中所述键值对的值是“1”?字典的键值对不应该是:“id of a” - “a”,其中'a'是对象。