Я хочу создать образец из 3 вариантов из данного словаря. Длина словаря может быть переменной.Создал образец из взвешенного случайного выбора
Что я сделал в предыдущем коде, это создать словарь весовых значений, в данном случае 12 значений и ключей.
Невозможно получить образец из моего random.choice.
Использование Python 3
Мой словарь
dictionary = {'Three': 14.4, 'Five': 11.2, 'Two': 14.4, 'Thirteen': 3.3, 'One': 17.6, 'Seven': 3.3, 'Nine': 3.3, 'Ten': 3.3, 'Twelve': 3.3, 'Eight': 3.3, 'Four': 12.0, 'Six': 10.4}
Я стараюсь, чтобы получить образец 3 формы случайного выбора словаря.
my_sample = random.sample(random.choice(dictionary), 3)
print(my_sample)
Но эта ошибка
Traceback (most recent call last):
File "c_weights.py", line 38, in <module>
my_sample = random.sample(random.choice(dictionary), 3)
File "/usr/lib64/python3.3/random.py", line 252, in choice
return seq[i]
KeyError: 11
Попытка получить
My_sample = ('One', 'Четыре', 'Двенадцать'), например.
Редактировать: Просто, чтобы быть ясным, к чему я работаю.
('One', 'Four','Twelve')
('Two', 'One','Six')
('Four', 'Two','Five')
('One', 'Eight','Two')
('Thirteen', 'Three','Six')
Так уникальные наборы, построенные по взвешенной вероятности из в словаре (или кортеж, если это лучше)
я не получаю взвешенную часть этого. Вы хотите, чтобы «Три» были частью образца гораздо чаще, чем «Тринадцать»? Ни 'random.sample', ни' random.choice' не сделают этого, но это то, что люди обычно после того, как говорят «взвешенный случайный выбор». – DSM
Я не вижу логики вашей взвешенной случайности. Есть и другие способы сделать это. [Здесь] (http://stackoverflow.com/questions/19871608/generating-weighted-random-numbers) является одним из способов с numpy. Я лично использую [этот путь] (http://stackoverflow.com/a/14992686/377366). – KobeJohn
@ DSM Да, я хочу, чтобы «Один» был вырван из sampl пропорционально больше, чем «Тринадцать» байтов, которые я предоставил. – sayth