1

我在这个任务上遇到了几个小时的麻烦,我只是被困在做什么。

首先,我需要一个接受字典参数的函数,然后返回与最大值关联的键。这是我尝试过的:

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

然后我需要创建一个函数,它接受一个字符串“名称”和一个字典“重叠”作为参数,它必须按照它们表示基因组序列的顺序返回一个读取名称列表:

`def findOrder(名称,重叠):

读取顺序 = []`

我需要在另一个函数中使用函数 findKeyForLargestValue(d) 。我需要使用应该返回 [name] 的基本情况和应该返回 [name] + findOrder(nextName) 的递归情况,其中 nextName 是与当前读取的右端有最大重叠的读取的名称(名称) .

任何帮助表示赞赏,因为我真的迷路了。甚至不确定 findKeyForLargestValue 的代码是否正确

4

2 回答 2

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`
于 2013-01-04T02:55:29.947 回答
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
于 2013-01-04T02:51:35.047 回答