I have a program where I\'m keeping track of the success of various things using collections.Counter
— each success of a thing increments the corr
Given a dictionary of choices with corresponding relative probabilities (can be the count in your case), you can use the new random.choices added in Python 3.6 like so:
import random
my_dict = {
"choice a" : 1, # will in this case be chosen 1/3 of the time
"choice b" : 2, # will in this case be chosen 2/3 of the time
}
choice = random.choices(*zip(*my_dict.items()))[0]
For your code that uses Counter
, you can do the same thing, because Counter
also has the items()
getter.
import collections
import random
my_dict = collections.Counter(a=1, b=2, c=3)
choice = random.choices(*zip(*my_dict.items()))[0]
Explanation: my_dict.items()
is [('a', 1), ('b', 2), ('c', 3)]
.
So zip(*my_dict.items())
is [('a', 'b', 'c'), (1, 2, 3)]
.
And random.choices(('a', 'b', 'c'), (1, 2, 3))
is exactly what you want.