0
def big(dict, n):
    line = []

    for k in dict:
       if k > n:
            line.append(k)
            return line

我必须找到dict中大于n的所有元素。

但是,我的代码只返回字典中大于 n 的最大数。

我需要做什么才能使其正确?

4

4 回答 4

6

选项卡return line太远了,所以它在找到大于的第一个 键时返回(注意:字典不是按您编写的方式排序的),而不是在返回之前遍历所有键。尝试:n

def big(dic, n):
    line = []
    for k in dic:
        if k > n:
            line.append(k)
    return line

实际上,您可能更喜欢它使用列表推导(并且该函数仅变成一行)。

def big(dic, n):
    return [k for k in dic if k>n]

.

字典由键值对组成,{key: value}当我们迭代字典时,我们正在迭代它的键。这解释了使用变量k来迭代。那是,

[k for k in dic] = [key1, key2, ...]

因此,如果您想在字典中找到最大值,您可以使用:

    return [dic[k] for k in dic if dic[k]>n]

注意:我已将变量名称更改为dic因为(正如@AndrewJaffe 提到的)dict是一个内置对象,在这里重命名它可能会导致意外的事情发生,并且通常被认为是不好的做法。例如,如果您想检查type(dic)==dict.

于 2012-08-24T10:55:49.747 回答
1
def big(dic, n):
    line = []
    for k in dic:
       if  dic[k]> n:      #compare value instead of key      
            line.append(k) #use k if you're appending key else dic[k] for val
            return line

输出

>>> print big({'a':10,'b':15, 'c':12},11)
['c']
于 2012-08-24T11:24:52.167 回答
1

天真地遍历字典会给你一个序列。不是价值观

所以要做你想做的事,你需要itervalues

for k in d.itervalues():    ### call it "d" rather than "dict"
   if k>n:
      line.append(k)

或者,正如其他人所指出的,使用列表推导。

另外,不要使用dict名称,因为它会影响内置函数。

于 2012-08-24T11:24:59.773 回答
0

将 return 语句向后移动两个制表符,否则它将返回大于 n 的第一个值。

于 2012-08-24T10:55:34.110 回答