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)