【发布时间】:2016-05-23 21:07:59
【问题描述】:
说,我有一本字典
D = {'A':0.25,'C':0.25,'G':0.25,'T':0.25}
字典值的总和总是一。我想为 D 中的每个键设置如下范围:
第一个键:
(0, D[FirstKey])。第二个键
(SecondRangeParameterOfFirstKey, SecondRangeParameterOfFirstKey + ValueOfSecondKey),即(0.25,0.50)。第三个键是
( SecondRangeParameterOfSecondKey,SecondRangeParameterOfSecondKey + ValueOfSecondKey),即(0.50,0.75)。第四个键的范围是
(0.75,1)。
有一件事是最后一个键的范围的最后一个参数将始终为 1,即所有值的总和。
我生成一个介于 0 和 1 之间的随机浮点数。我需要在随机浮点数之后返回密钥。例如,对于字典 D 的给定顺序,如果我生成 0.63,那么我必须返回第三个键 G,因为它的范围是 (0.50,0.75)。由于字典没有排序,所以我必须按照字典的顺序计算范围并返回返回字典顺序的键。到目前为止,我为这个问题编写了如下代码:
import random
def W(D):
vv = 0
f = 0
mer = ''
ran = random.uniform(0,1)
DI = D.items()
for k,v in DI:
mer = ''
if (ran >= f) and (ran < D[k]+vv):
mer = k
vv += v
return mer
当生成落在第三个键范围 (0.50,0.75) 的浮点数时,我的函数永远不会返回第三个键,而是返回第四个键。
【问题讨论】:
-
你只生成一个随机数?字典也是无序的,因此除非您对数据进行排序,否则不知道第一个键
-
每次运行这个函数,我只生成一个随机浮点数。
-
那么你想要随机浮点值下最接近的值吗?为什么这些值没有存储为上限,您对第一个键的想法是什么?
-
我听不懂你的话。
-
什么是第一把钥匙?它是否基于值、键.. 值是否总是相等的,即如果你有 10 个键,那么所有的键都是 0.10?你说 对于字典 D 的给定顺序 但是字典是无序的,所以没有意义
标签: python-3.x