具有共享内存的二维python字典

He Li

我需要将数据从csv文件或Excel工作表(带有行和列)加载到二维python字典中。例如,如果excel工作表中的数据如下所示:

    name  age  gender location
1   Jim   18    male   China
2   Ross  18    male   China
3   Cara  19    female Japan
4   Ted   18    male   China

然后输出的python dict应该看起来像这样:

data = {
  1: {'name': 'Jim', 'age': 18, 'gender': 'male', 'location': 'China'},
  2: {'name': 'Ross', 'age': 18, 'gender': 'male', 'location': 'China'},
  3: {'name': 'Cara', 'age': 19, 'gender': 'female', 'location': 'Japan'},
  4: {'name': 'Ted', 'age': 18, 'gender': 'male', 'location': 'China'}
}

您可以看到在此二维字典中有很多重复的信息(对于真实数据,它具有相同的条件),因此我想到了一个开发具有共享内存的新字典的想法。具体来说,在上面的示例中,我希望我的二维字典仅保存{'age': 18, 'gender': 'male', 'location': 'China'}跨多个行的一个副本(这些行不需要相邻)。如果调用data[1]['age']data[2]['age'],它应该在相同的提取的小型共享字典中进行查找。

我已经阅读了python dict的源代码,并且我知道python dict仅保存指向键和值的指针(通常对于小int和string对象,不同的指针可能指向同一对象)。因此,当我只想保存一个副本时,就是一个指针的副本。

关于如何设计此字典的任何想法?非常感谢!!!

编辑

对不起,我忘了提。此二维字典中的数据将是只读的。

钟表

我猜您在问有关数据压缩解决方案的问题,该解决方案应同时考虑内存大小和引用的使用。最小的内存占用量通常属于一个整数,该整数应至少与内存引用一样小,因此,我会尝试将所有内容映射为整数,除非它不太方便。而且,列表比字典小,并且可以直接快速索引。

这是一个可能引发一些想法的替代实现:

import sys

data = {
  1: {'name': 'Jim', 'age': 18, 'gender': 'male', 'location': 'China'},
  2: {'name': 'Ross', 'age': 18, 'gender': 'male', 'location': 'China'},
  3: {'name': 'Cara', 'age': 19, 'gender': 'female', 'location': 'Japan'},
  4: {'name': 'Ted', 'age': 18, 'gender': 'male', 'location': 'China'}
}

In [43]: sys.getsizeof(data)
Out[43]: 280    # bytes

data_list = [ 
  ('Jim', 18, 0, 'CH'),     # 'CH' => 'China'
  ('Ross', 18, 0, 'CH'),    #  0 => Female, 1 => Male
  ('Cara', 19, 1, 'JP'),    # 'JP' => 'Japan'
  ('Ted', 18, 0, 'CH')
]


In [44]: sys.getsizeof(data_list)
Out[44]: 104   # bytes

_name, _age, _gender, _location = 0, 1, 2, 3

In [45]: data_list[2][_age]  # access as 2D array instead of 2-level dict
Out[45]: 19

上面的解决方案会稍慢一些,但是对于大型字符串会产生一些好处。除非每条记录开始变长,否则使用引用可能不会为您节省任何费用。最后,如果将所有值替换为整数而不是字符串名称和国家/地区代码,则将使用Python列表进行大量压缩。

如果您真的想选择能够提供最佳压缩效果的数字代码,请查看霍夫曼编码,例如,该网站:http : //www.geeksforgeeks.org/greedy-algorithms-set-3-huffman-coding

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有一维常量的二维数组的delete []释放内存

来自分类Dev

指向相同内存的具有不同类型的两个二维数组

来自分类Dev

检索python中二维字典的唯一键(第二维)?

来自分类Dev

使用usort()对具有二维排序条件的二维数组进行排序

来自分类Dev

将二维列表转换为python中的字典

来自分类Dev

Python:将列表转换为二维映射字典

来自分类Dev

在具有共享比例的单个二维直方图矩阵中组合两个2D数据集

来自分类Dev

具有二维数组的numpy.partition()

来自分类Dev

具有二维数组的跳线模式

来自分类Dev

具有Excel范围的二维数组

来自分类Dev

检查集合是否具有二维数组

来自分类Dev

具有二维数组的ng-repeat

来自分类Dev

二维链表内存未结转

来自分类Dev

斯威夫特二维字典错误

来自分类Dev

从二维列表创建字典

来自分类Dev

斯威夫特二维字典错误

来自分类Dev

二维适合python

来自分类Dev

Python二维数组

来自分类Dev

Python二维数组

来自分类Dev

python二维递归

来自分类Dev

二维数组python中所有列的总和

来自分类Dev

Pytorch runtimeError“预期的矩阵,在其中具有一维,二维张量”

来自分类Dev

需要有关C ++中二维数组的动态内存分配的帮助

来自分类Dev

c ++ malloc和二维数组没有保留足够的内存

来自分类Dev

使用C中的双指针将二维数组放入现有内存中

来自分类Dev

每个单元格中带有字典的二维数组

来自分类Dev

将具有一行多列的二维数组转置为具有多行一列的二维数组

来自分类Dev

静态二维数组和动态二维数组的内存映射之间的区别?

来自分类Dev

在二维网格(多维列表)中获取具有最大值的所有图块

Related 相关文章

热门标签

归档