0

特定の辞書から 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', 'Four','Twelve') です。

編集:私が何に取り組んでいるのかを明確にするために。

('One', 'Four','Twelve')
('Two', 'One','Six')
('Four', 'Two','Five')
('One', 'Eight','Two')
('Thirteen', 'Three','Six')

したがって、辞書内からの加重確率に基づいて構築された一意のセット(または、それがより良い場合はタプル)

4

2 に答える 2

2

random.choice()辞書に正常に適用することはできません。これは、マッピングではなく、シーケンスの関数です。

試す:

random.sample(dictionary, 3)

これは、dict からの 3 つのランダムなキーを含むリストを返します。

于 2013-11-09T22:42:33.957 に答える
1

さて、これはおそらくバグ/統計上の誤りでいっぱいですが、これはあなたにとっての出発点であり、今のところこれ以上の時間はありません. また、非常に非効率的です!そうは言っても、それが役立つことを願っています:

import random

d= {'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}
total_weight = sum(d.values())
n_items = 3
random_sample = list()
d_mod = dict(d)

for i in range(n_items):
    random_cumulative_weight = random.uniform(0, total_weight)
    this_sum = 0.0
    for item, weight in d_mod.items():
        this_sum += weight
        if this_sum >= random_cumulative_weight:
            random_sample.append(item)
            break
    del(d_mod[item])
    total_weight -= this_sum

random_sample

['Seven', 'Nine', 'Two'] などを生成します。

于 2013-11-09T23:12:40.600 に答える