Python 3.x Python字典,使范围与其值关联并返回它们
喂,我有一本字典Python 3.x Python字典,使范围与其值关联并返回它们,python-3.x,Python 3.x,喂,我有一本字典 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,SecondRang
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)
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
随机导入
def W(D):
vv=0
f=0
mer=''
ran=随机均匀(0,1)
DI=D.项目()
对于DI中的k,v:
mer=''
如果(ran>=f)和(ran
当生成的浮点值落在第三个键的范围内(即
(0.50,0.75)
)时,My函数从不返回第三个键,而是返回第四个键。dict是无序的,因此如果您想保持某种顺序,则需要一个,这将根据键顺序上的范围增加来查找范围内的键,这要求您添加按值排序的键:
from collections import OrderedDict
od = OrderedDict((('A', 0.25), ('C', 0.25), ('G',0.25), ('T', 0.25)))
def W(od):
ran = random.uniform(0, 1)
tot = 0
for k, v in od.items():
if tot <= ran < v + tot:
return k
tot += v
from operator import itemgetter
d = {'A': 0.35, 'C': 0.2, 'T': 0.3, 'G': 0.15}
def W(d):
ran = random.uniform(0, 1)
tot = 0
# sort from lowest value to highest
for k, v in sorted(d.items(),key=itemgetter(1)):
if tot <= ran < v + tot:
return k
tot += v
如果值不完全相同,则需要进行排序,您可以使用作为键按值对项目进行排序:
from collections import OrderedDict
od = OrderedDict((('A', 0.25), ('C', 0.25), ('G',0.25), ('T', 0.25)))
def W(od):
ran = random.uniform(0, 1)
tot = 0
for k, v in od.items():
if tot <= ran < v + tot:
return k
tot += v
from operator import itemgetter
d = {'A': 0.35, 'C': 0.2, 'T': 0.3, 'G': 0.15}
def W(d):
ran = random.uniform(0, 1)
tot = 0
# sort from lowest value to highest
for k, v in sorted(d.items(),key=itemgetter(1)):
if tot <= ran < v + tot:
return k
tot += v
你只生成一个随机数?此外,dict是无序的,因此不知道第一个键,除非您对数据进行排序。每次运行此函数时,我只生成一个随机浮点。那么您希望随机浮点值下的最近值吗?为什么这些值没有存储为上限?你对第一个键的想法是什么?我不明白你的话。什么是第一个键?它是基于值,键。。值是否始终相等,即如果有10个键,则所有键都相等。10?你说的是字典D的给定顺序,但字典是无序的,所以没有意义。谢谢你,看看我的问题。你们几乎是我期望的,但我只需要从0开始v,第一次迭代是0,第二次迭代是0.25,第三次迭代是0.50,最后一次是0.75。我不想在这里相乘,相反,在第二次迭代时,v的值将是第一次迭代时的tot+v值,在第三次迭代时,v将是第二次迭代时的tot+v值,所以v是0.50,最后将是0。75@DumbCoder,这里没有乘法,我们所做的就是把总数从最低值累加到最高值谢谢,你又救了我一天。它返回的正是我想要的,但在我需要应用此函数的地方给出了错误的答案。我想我误解了要求。谢谢,现在可以了。我需要了解集合和操作员模块。我认为这样的模块可以节省我的时间。请给我推荐一些关于它们的链接,我可以学到一些新东西。@DumbCoder,别担心,我在文档中添加了这些链接