Вы также можете создать список из 100 элементов для каждого значения, а затем пусть random.choice делает выбор из списка посещенных, члены которого загружаются в желаемом весе:
import random
from collections import defaultdict
d = (
(701, 1, 0.2),
(701, 2, 0.3),
(701, 3, 0.5),
(702, 1, 0.2),
(702, 2, 0.3),
(702, 3, 0.5)
)
class WeightedLookup(object):
def __init__(self, valueTupleList):
self.valdict = defaultdict(list)
for key, val, prob in valueTupleList:
self.valdict[key] += [val]*(int)(prob*100)
def __getitem__(self,key):
return random.choice(self.valdict[key])
lookup = WeightedLookup(d)
# test out our lookup distribution, sample it 100000 times
res = { 1:0, 2:0, 3:0 }
for i in range(100000):
res[lookup[701]] += 1
# print how many times each value was returned
for k in (1,2,3):
print k, res[k]
Печать:
1 20059
2 30084
3 49857