| 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) | |