I want to chunk a list of objects in order that the sum of a property is less than a value, let say 10.
lst = [{"value": 1}, {"value": 8}, {"value": 2}, {"value": 6}, {"value": 1}, {"value": 9}, {"value": 10}]
result = [[{"value": 1}, {"value": 8}], [{"value": 2}, {"value": 6}, {"value": 1}], [{"value": 9}], [{"value": 10}]]
This is what I tried so far:
def chunks_by_prop_sum(lst, prop, max_per_chunk):
chunks = []
chunk_prop_sum = 0
chunk = []
for i in range(0, len(lst)):
if chunk_prop_sum <= max_per_chunk- lst[i][prop]
chunk.append(lst[i])
chunk_prop_sum += lst[i][prop]
else:
chunks.append(chunk.copy())
chunk = []
chunk_prop_sum = 0
return chunks
I would like to improve that function by making a generator if possible and also to handle when an object value is greater than the max per chunk threshold.
The order of objects in chunks matter.