Python 三重列表与双字典

Python 三重列表与双字典,python,list,dictionary,document,bigdata,Python,List,Dictionary,Document,Bigdata,我有40000份文件,每个文件93.08字。在平均值上,每个单词都是一个数字(可以索引字典),每个单词都有一个计数(频率)。阅读更多 我在两个数据结构之间存储数据,我想知道我应该选择哪一个,Python人会选择哪一个 三重列表: 列表,其中每个节点: __是一个列表,其中每个节点: __。。。。是两个值的列表单词id和计数 双字典: 字典,带有doc\u id键和值字典 该值字典将有一个word\u id作为键,count作为值 我觉得第一个需要更少的空间(因为它不存储doc\u id),而第

我有40000份文件,每个文件93.08字。在平均值上,每个单词都是一个数字(可以索引字典),每个单词都有一个计数(频率)。阅读更多

我在两个数据结构之间存储数据,我想知道我应该选择哪一个,Python人会选择哪一个

三重列表:

列表,其中每个节点:

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

__。。。。是两个值的列表<代码>单词id和
计数

双字典:

字典,带有
doc\u id
键和值字典

该值字典将有一个
word\u id
作为键,
count
作为值



我觉得第一个需要更少的空间(因为它不存储
doc\u id
),而第二个更易于处理和访问。我的意思是,访问列表中的I元素是O(n),而在字典中它是常量。我应该选哪一本?

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


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

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


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

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

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


列表中的查找是O(n),而字典中的查找是O(1)。虽然列表在内存中要比列表大得多,但如果不关心项目的顺序,则一定要使用字典,因为字典用于对关联数据进行分组,而列表通常用于对更一般的项目进行分组

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



列表中的查找是O(n),而字典中的查找是O(1)。虽然列表在内存中要比列表大得多,但本质上,您只需要存储大量的数字,而最节省空间的选择是存储。这些是一维的,因此您可以编写一个类,它包含三个索引(最后一个是0表示
word\u id
,1表示
count
),并执行一些基本的加法和乘法以找到正确的1D索引。

基本上,您只需要存储大量的数字,其中最节省空间的选择是一个。这些是一维的,因此您可以编写一个类,它包含三个索引(最后一个是0表示
word\u id
,1表示
count
),并执行一些基本的加法和乘法来找到正确的1D索引。

访问列表的第i个元素是O(1)。简单的链表是O(n)访问索引是O(1),但是在一个未知索引列表中找到元素是O(n),Python列表不是链接列表,它们就像java数组列表或C++向量。它们是动态增长的数组,您可以通过计算偏移量随机访问这些数组。是的,在许多语言中,单词list默认表示链表。这里有一个关于Python列表时间复杂性的很好的参考:访问列表的第i个元素是O(1)。简单的链表是O(n)@RushyPanchal。访问索引确实是O(1),但在一个索引未知的列表中查找元素是O(n)Python列表不是链表,它们就像java数组列表或C++向量。它们是动态增长的数组,您可以通过计算偏移量随机访问这些数组。但是,是的,在许多语言中,单词列表默认表示链表?我不在乎订单@gsamaras作为N的一个因子,它不会。@gsamaras唯一的额外空间是用于键的,但是Python字符串在每个字符串的内存中只存储“一次”——也就是说,如果每个元素都有相同的键集,那么它是一个恒定的额外空间(可以忽略不计)。@RushyPanchal哪个字符串
doc\u id
word\u id
count
是数字,确切地说是整数。伙计,当然是用大o表示法,但实际上?@gsamaras是字典的键,除非你把它们存储为其他东西。但是如果你为了清晰起见而使用字典,那么使用字符串作为键似乎很直观,但这需要更多的空间,对吗?我不在乎订单@gsamaras作为N的一个因子,它不会。@gsamaras唯一的额外空间是用于键的,但是Python字符串在每个字符串的内存中只存储“一次”——也就是说,如果每个元素都有相同的键集,那么它是一个恒定的额外空间(可以忽略不计)。@RushyPanchal哪个字符串
doc\u id
word\u id
count
是数字,确切地说是整数。伙计,当然是用大o表示法,但实际上?@gsamaras是字典的键,除非你把它们存储为其他东西。但是如果你为了清晰起见使用字典,那么使用字符串作为键似乎很直观。是的,我不在乎顺序!是的,我不在乎订单!为什么这会被否决?我会投赞成票,因为这个想法似乎并不坏,而且落选者也没有为自己的行为辩护。为什么会投反对票?我会投赞成票,因为这个想法似乎并不坏,而且落选者也没有为自己的行为辩护。