如何在大小小于1MB的部分中拆分列表
我有一个由远程API调用返回的字典的排序列表(最终的响应小于4 MB)
我想将这个列表拆分成组块,其中MAX允许所得到的单个块的尺寸为1兆字节*如何在大小小于1MB的部分中拆分列表
所得块的列表需要保存的初始排序;这些块然后将被序列(通过泡菜)并投入不同Blob字段具有1 MB最大尺寸
什么是使用Python 2.5实现的最快代码?
*块的数目应该是适合的1Mb的约束
对我的评论跟进最低。您可以使用this extension。 和下面的脚本。假设这不会优化块的大小。它只是确保他们都不是比MAX
from sizeof import asizeof
matrix=[]
new_chunk = []
size_of_current_chunk = 0
for x in your_sorted_list:
s = asize(x)
if size_of_current_chunk + s > MAX:
matrix.append(new_chunk)
size_of_current_chunk = 0
new_chunk = []
size_of_chunk += s
new_chunk.append(x)
if len(new_chunk):
matrix.append(new_chunk)
元素matrix
将包含对象的列表少于MAX在他们每个人的字节。
有趣的是,衡量asize的性能,仅仅对json字符串中的对象进行编码并将size字符串(char)与json字符串相乘。
@systempuntoout如果您需要维护订单,那么我认为这个答案会提供一个可能的解决方案。顺序被保留,输出是一个列表,其中每个元素都是在矩阵的两个级别上保存顺序的块的列表。 – 2010-11-10 09:24:39
+1的努力,但因为你测试的大小n次(我不知道asize函数的性能)它看起来很慢(我必须试试:))。 – systempuntoout 2010-11-10 11:07:22
[sys.getsizeof()](http://docs.python.org/library/sys.html#sys.getsizeof)仅在2.6及更高版本中受支持。 2.5中可能无法做到你想要的。 – 2010-11-10 00:19:35
是否要将字典的内存大小设置为1MB或者您是否在查看某种序列化表示?你想保留大块的订单,或者你正在寻找一个最佳的包装?我会提前警告你,“Bin Packing”是一个NP难题的典型例子,所以追求最佳解决方案可能并不值得。 – 2010-11-10 01:01:05
如果您的Python版本 2010-11-10 01:44:54