根据其值随机选择一个dict键,有更大的选择机会

时间:2019-09-23 00:18:59

标签: python-3.x

因此,我正在尝试为朋友提供解决方案,让人们为事业捐款并被随机选中。问题是,您捐赠的越多,被选中的机会就越大。

说我有一本人文字典:

people = {
    "Mike":0,
    "Mark":4,
    "Zach":2,
    "Bryan":2,
    "Eddie":1
    "Erin":0,
}

是否可以从这个字典中随机挑选一个人,但是根据他们的价值,给他们更大的获胜机会?

3 个答案:

答案 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?。)

查看实际操作:https://repl.it/repls/AmbitiousVioletMacrolanguage

答案 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]))
相关问题