Как случайным образом выбрать ключ из словаря на основе его значения с плавающей запятой [duplicate]

1

Скажем, у меня есть дикт

{'option one': 5.0, 'option two': 5.0, 'option three': 10.0}

Как я могу случайным образом выбрать ключ на основе приведенных выше вероятностей (т.е. вариант 1 и 2 будут иметь 25% выбора. Вариант 3 будет иметь 50% шанс выбора)

  • 2
    Вы можете использовать numpy.random.choice - он имеет аргумент p (вероятности)
Теги:
random
probability

2 ответа

0

Вдоль линий

keys = dictionary.keys()
weights = dictionary.values()

selected = numpy.random.choice(keys, size=1, replace=True, p=weights)
0

Как один лайнер:

import random

random.seed(100)
d = {'option one': 5.0, 'option two': 5.0, 'option three': 10.0}
picked = random.choices(*zip(*d.items()))[0]
print(picked)
# option one

Больше сломано:

import random

random.seed(100)
d = {'option one': 5.0, 'option two': 5.0, 'option three': 10.0}
# Key-value pairs in dictionary
items = d.items()
# "Transpose" items: from key-value pairs to sequence of keys and sequence of values
values, weights = zip(*items)
# Weighted choice (of one element)
picked = random.choices(values, weights)[0]
print(picked)
# option one

Обратите внимание, что random.choices (который, в отличие от random.choice, предлагает параметр weights) был добавлен в Python 3.6.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню