【发布时间】:2021-05-17 15:55:02
【问题描述】:
我有一个函数 (makeDict),它以这种形式创建字典:
def makeDict(gcRange, min_val):
maxC = gcRange[1]-min_val
probC = random.choice(np.arange(min_val, maxC, 2))
gc = [gcRange[0]-probC, gcRange[1]-probC]
probG = random.choice(np.arange(gc[0], gc[1], 2))
at = 100 - probC - probG
probA = at/2
probT = at/2
return({"A":probA, "T":probT, "G":probG, "C":probC})
Output from the function
{'A': 30.0, 'T': 30.0, 'G': -4, 'C': 44}
{'A': 25.0, 'T': 25.0, 'G': 25, 'C': 25}
{'A': 29.0, 'T': 20.0, 'G': 31, 'C': 40}
.....
我想应用该功能并删除所有键为负值的字典
Final Output:
{'A': 28.0, 'T': 29.0, 'G': 20, 'C': 49}
{'A': 29.0, 'T': 30.0, 'G': 20, 'C': 50}
我想要一个循环生成 10 个字典,同时排除具有负值的字典
d=[]
for i in range(0, 10):
new= ""
while True:
new=makeDict([40,60],10)
for v in new:
if new[v] < 0:
del new
break
d.append(new)
但是,循环似乎卡住了,在 pycharm 中我得到“代码无法访问” 有什么建议吗?
【问题讨论】:
-
你的
break让你脱离for循环,但不是无限的while循环 -
如果我们能看到
makeDict函数本身会更容易提供帮助。我看到的一个大问题是,当使用for v in new时,v被分配给new的项目。然后您不必使用new[v]来获取这些项目。你应该使用更像for v in new: if v < 0: ...的东西。 -
我添加了函数
-
是的,我使用的是 if v
标签: python dictionary for-loop