d = {0: 48, 1: 13, 2: 6, 3: 61, 4: 14, 5: 8, 6: 4, 7: 41, 8: 84, 9: 50} というようなdictオブジェクトから、d[k] の大きさに応じてランダムに選択する処理を考えていました。 たとえば d[0] = 48 d[5] = 8 なので、"0" は "5" の6倍(= 48/8 )の確率で選択されるようにしたいです。 普通、真っ先に思いつくのは、こんな処理でしょう。 def choice(d): s = 0 for k, v in d.items(): s += v rnd = random.randrange(s) for k, v in d.items(): s += v if rand < s: return k dを一旦全部読み込んで d[k] の和をとってから、乱数を発生させて また d を最初から読んでいって、
![『重みをつけてランダムに選択する方法』](https://cdn-ak-scissors.b.st-hatena.com/image/square/7fe2ee498677390c13e9bc4856c9da9089994e2d/height=288;version=1;width=512/https%3A%2F%2Fstat.profile.ameba.jp%2Fprofile_images%2F20140724%2F10%2F80%2FF5%2Fj%2Fo020002001406165980958.jpg)