我有一个由三级嵌套字典组成的数据结构,该字典保存三部分对象的出现次数。我想用它构建一个具有特定形状的 DataFrame,但我想不出一种不消耗大量工作内存的方法来实现它——因为表很大(几个完整的 GB)。
基本功能如下所示:
class SparseCubeTable:
def __init__(self):
self.table = {}
self.dim1 = []
self.dim2 = []
self.dim3 = []
def increment(self, dim1, dim2, dim3):
if dim1 in self.table:
if dim2 in self.table[dim1]:
if dim3 in self.table[dim1][dim2]:
self.table[dim1][dim2][dim3] += 1
else:
self.dim3.append(dim3)
self.table[dim1][dim2][dim3] = 1
else:
self.dim2.append(dim2)
self.dim3.append(dim3)
self.table[dim1][dim2] = {dim3:1}
else:
self.dim1.append(dim1)
self.dim2.append(dim2)
self.dim3.append(dim3)
self.table[dim1] = {dim2:{dim3:1}}
Run Code Online (Sandbox Code Playgroud)
这样做的目的是为了让密钥求和等变得更容易。SparseCubeTable 的使用方式如下:
In [23]: example = SparseCubeTable()
In [24]: example.increment("thing1", "thing2", "thing3")
In [25]: example.increment("thing1", "thing2", "thing3")
In [26]: example.increment("thing4", "thing5", "thing6") …
Run Code Online (Sandbox Code Playgroud)