0

次のような辞書があるとします。ここで、値は各キーがテキストに現れる確率です。

   dict = {'a':0.66,'b':0.07,'c':0.04 and so on so the values of the dict sum up to one}

それらの値の範囲を持つ別の辞書を作成したいとします。価値があります。float で range() を使用できないため、最初にすべての値を 100 で乗算しようとしたため、int に変換されます。これらの値をその範囲に置き換えたいとします。たとえば、「a」は範囲(0,66)、「b」範囲(66,73)、「c」(73,77)などを取得します。次のループでそれを実行しようとしましたが、そうではありません仕事:

start = 0
end = 0
for k,v in dict.items():
   end+=int(v*100)
   range_dict[k]=range(start,end)
   start+=end

誰か助けてくれませんか?私は何をすべきかを考え出しています!

4

2 に答える 2

3

変更した場合

start += end

start = end

動作するはずです(xrangeここを使用して見やすくします):

>>> d = {'a':0.66,'b':0.07,'c':0.04}
>>> start = 0
>>> end = 0
>>> range_dict = {}
>>> for k,v in d.items():
...    end+=int(v*100)
...    range_dict[k]=xrange(start,end)
...    start=end
... 
>>> range_dict
{'a': xrange(66), 'c': xrange(66, 70), 'b': xrange(70, 77)}

しかし、@ Satoru.Logicが推測したように、加重ランダム数が必要な場合は、はるかに優れた方法があります。Eli Benderskyは、Pythonでのアプローチの概要をここに示しています。

于 2012-10-08T00:14:37.950 に答える