因此,我正在尝试为朋友提供解决方案,让人们为事业捐款并被随机选中。问题是,您捐赠的越多,被选中的机会就越大。
说我有一本人文字典:
people = {
"Mike":0,
"Mark":4,
"Zach":2,
"Bryan":2,
"Eddie":1
"Erin":0,
}
是否可以从这个字典中随机挑选一个人,但是根据他们的价值,给他们更大的获胜机会?
答案 0 :(得分:0)
import random
def flatlist(l): return [item for sublist in l for item in sublist]
biglist = flatlist([[d]*people[d] for d in people])
print('weighted people:', biglist)
winner = random.choice(biglist)
print('winner:', winner)
答案 1 :(得分:0)
random
模块有一个choices
方法,该方法采用权重(默认情况下返回k=1
的列表,因此取第一项):
import random
print(random.choices(list(people.keys()), weigths=people.values())[0])
(如果您像我一样想知道,keys()
和values()
的排列顺序是否匹配,请参见Python dictionary: are keys() and values() always the same order?。)
答案 2 :(得分:-1)
这是一种方法:
from random import choice
people = {"Mike":0,
"Mark":4,
"Zach":2,
"Bryan":2,
"Eddie":1,
"Erin":0}
print(choice([a for b in [[p]*people[p] for p in people] for a in b]))