code: def _group_by_size_greedy(obj_list, tot_groups):
      
      sorted_list = sorted(obj_list, key=lambda x: x['size'], reverse=True)
      groups = [[] for _ in range(tot_groups)]
      for index, obj in enumerate(sorted_list):
          current_group = groups[index % len(groups)]
          current_group.append(obj)
      return groups
docs: Partition a list of objects in even buckets
  
      The idea is to choose the bucket for an object in a round-robin fashion.
      The list of objects is sorted to also try to keep the total size in bytes
      as balanced as possible.
      :param obj_list: a list of dict-like objects with a 'size' property
      :param tot_groups: number of partitions to split the data into.
      :return: a list of lists, one for each partition.