我有一個由遠程API調用返回的字典的排序列表(最終的響應小於4 MB)
我想將這個列表拆分成組塊,其中MAX允許所得到的單個塊的尺寸爲1兆字節*如何在大小小於1MB的部分中拆分列表
所得塊的列表需要保存的初始排序;這些塊然後將被序列(通過泡菜)並投入不同Blob字段具有1 MB最大尺寸
什麼是使用Python 2.5實現的最快代碼?
*塊的數目應該是適合的1Mb的約束
我有一個由遠程API調用返回的字典的排序列表(最終的響應小於4 MB)
我想將這個列表拆分成組塊,其中MAX允許所得到的單個塊的尺寸爲1兆字節*如何在大小小於1MB的部分中拆分列表
所得塊的列表需要保存的初始排序;這些塊然後將被序列(通過泡菜)並投入不同Blob字段具有1 MB最大尺寸
什麼是使用Python 2.5實現的最快代碼?
*塊的數目應該是適合的1Mb的約束
我找到了pympler庫,asizeof
模塊爲使用Python 2.2.3,2.3.7,2.4.5,2.5.1,2.5.2,2.6測試的一個或多個Python對象提供基本大小信息。
對我的評論跟進最低。您可以使用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版本<2.6,那麼可以查看http://code.activestate.com/recipes/546530/以獲取Python中對象的大小。 – 2010-11-10 01:44:54