三重列表 VS 双字典

Triple list VS double dictionary

我有 40.000 个文档,每个文档 93.08 个单词。在 avg. 上,每个单词都是一个数字(可以索引字典)并且每个单词都有一个计数(频率)。阅读更多 here.

我在两种存储数据的数据结构之间徘徊,想知道我应该选择哪一种,Python 人们会选择哪一种!

三重列表:

一个列表,其中每个节点:

__ 是一个列表,其中每个节点:

__.... 是两个值的列表; word_idcount

双字典:

一个字典,键 doc_id 和值字典。

该值字典将 word_id 作为键,count 作为值。


我觉得第一个需要的 space 更少(因为它不存储 doc_id),而第二个更容易处理和访问。我的意思是,访问列表中的 i 元素是 O(n),而它在字典中是常量,我认为。我应该选择哪一个?

你应该用字典。它将使处理您的代码更容易理解和编程,并且它的复杂性也会降低。

您使用列表的唯一原因是您是否关心文档的顺序。

如果您不关心项目的顺序,您绝对应该使用字典,因为字典用于对相关数据进行分组,而列表通常用于对更通用的项目进行分组。

此外,字典中的查找比列表中的查找更快。

列表中的查找是 O(n),而字典中的查找是 O(1)。尽管列表在内存中比列表大得多

本质上,您只想存储大量数字,space 最有效的选择是 array。这些是一维的,所以你可以写一个 class 接受三个索引(最后一个是 word_id 的 0 和 count 的 1)并做一些基本的加法和乘法来找到正确的一维索引。