import random
def weighted_shuffle(d):
""" 对字典按值的权重进行加权洗牌"""
items = d.items()
# 计算权重总和
total_weight = sum(w for v, w in items)
# 把所有元素根据权重转换成有序的权重列表
weight_list = [(v, w/total_weight) for v, w in items]
# 在权重列表上进行洗牌,直接使用权重作为比较依据
random.shuffle(weight_list)
# 再次计算每个元素出现的概率,存储在dict里面返回
result_dict = {v:w*total_weight for v, w in weight_list}
return result_dict
# 测试
d = {'a': 3, 'b': 1, 'c': 2, 'd': 4}
shuffled_dict = weighted_shuffle(d)
print(shuffled_dict)
上一篇:按值的范围将数据框绘制成箱线图。