File size: 1,042 Bytes
3ec7a0b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
def weighted_round_robin(weights):
provider_names = list(weights.keys())
current_weights = {name: 0 for name in provider_names}
num_selections = total_weight = sum(weights.values())
weighted_provider_list = []
for _ in range(num_selections):
max_ratio = -1
selected_letter = None
for name in provider_names:
current_weights[name] += weights[name]
ratio = current_weights[name] / weights[name]
if ratio > max_ratio:
max_ratio = ratio
selected_letter = name
weighted_provider_list.append(selected_letter)
current_weights[selected_letter] -= total_weight
return weighted_provider_list
# 权重和选择次数
weights = {'a': 5, 'b': 3, 'c': 2}
index = {'a', 'c'}
result = dict(filter(lambda item: item[0] in index, weights.items()))
print(result)
# result = {k: weights[k] for k in index if k in weights}
# print(result)
weighted_provider_list = weighted_round_robin(weights)
print(weighted_provider_list)
|