groups = {'a':100, 'b':10, 'c':23, 'd':23, 'e':12, 'f':34, 'g':67, 'h':135, 'i':5, 'j':39, 'k':60, 'l':204}
percents = [45, 20,20, 15]
n = 4
# 计算后
split_words = [320 , 142, 142, 106]
split_keys = ['33710' , '33720', '33730', '33740']
import numpy as np
def split(groups, split_words):
n = len(split_words)
groups_sorted = {}
tmpzip = sorted(groups.items(), key=lambda x: x[1], reverse=True)
for tuple_ in tmpzip:
groups_sorted[tuple_[0]] = tuple_[1]
values = [i for i in groups_sorted.values()]
keys = [i for i in groups_sorted.keys()]
print (values, "length:", len(values),'sum:',sum(values))
print (keys, "length:", len(keys))
groups = []
for index in range(n):
standard = split_words[index]
if index == (n-1):
groups.append(list(zip(keys,values)))
return groups
else:
for ind_bg,value in enumerate(values):
if value > standard:
group = [(keys[ind_bg],value)]
groups.append(group)
del values[ind_bg]
del keys[ind_bg]
break
else:
group = [(keys[ind_bg],value)]
del values[ind_bg]
del keys[ind_bg]
print('valbg:',values)
print('keybg:',keys)
delta =standard-value
for ind_sm,i in enumerate(values):
# print ("searching in :", i)
if i <= delta:
group.append((keys[ind_sm],i))
del values[ind_sm]
del keys[ind_sm]
print('valsm:', values, ind_sm)
print('keysm:', keys, ind_sm)
delta -= i
groups.append(group)
break
if __name__ == '__main__':
gg = split(groups, split_words)
print(gg)