我在这项任务中遇到了一些问题几个小时,我只是坚持做什么。
首先,我需要一个带字典参数的函数,然后返回与最大值关联的键。这就是我尝试过的:
def findKeyForLargestValue(d):
maxKey = ''
maxValue = 0
for name in d:
for subName in d[name]:
d = d[name][subName]
if d > maxValue:
maxKey = subName
return maxKey
然后我需要创建一个函数,它接受一个字符串'name'和一个字典'重叠'作为参数,它必须返回一个读取名称列表,它们代表基因组序列:
`def findOrder(name,overlapps):
readOrder = []`
我需要在其他函数中使用函数findKeyForLargestValue(d)。我需要使用应该返回[name]的基本情况和应该返回[name] + findOrder(nextName)的递归情况,其中nextName是与当前读取(名称)右端重叠最大的读取的名称
任何帮助都表示赞赏,因为我真的迷路了。甚至不确定findKeyForLargestValue的代码是否正确
答案 0 :(得分:2)
“简单”的答案是使用内置max
函数:
from operator import itemgetter
def findKeyForLargestValue(d):
key,value = max(d.items(),key=itemgetter(1))
return key
如评论中所述,如果内存确实是一个问题而你正在使用python2.x,那么你可以使用d.iteritems()
而不是d.items()
。我通常使用d.items()
,因为它可以在python2.x和python3.x上运行而无需修改(在此上下文中),与d.items()
相关联的额外内存与d.iteritems()
相比几乎总是无关紧要的对于我做过的任何工作。
如果您对itemgetter
感到困惑,请参阅以下内容:
def func(seq):
return seq[1]
#`func(x)` will return the same thing that `itemgetter(1)(x)` returns
# for any indexible object `x`
答案 1 :(得分:0)
首先,你的缩进不正确。
def findKeyForLargestValue(d):
for name in d:
for subName in d[name]:
d = d[name][subName]
if d > maxValue: #Look at the indentation here
maxKey = subName #And here
return maxKey