2012-08-24 101 views
0
def big(dict, n): 
    line = [] 

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

我必须找到大于n的字典中的所有元素。Python:字典的元素

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

为了使其正确,我需要做些什么?

+0

你的字典是什么样的? '对于dict'中的k循环*键*。 (另外,不要使用“dict”作为名字,因为它会影响'builtin'' dict'。 –

+0

你正在尝试检查python字典你有密钥和价值,你正在尝试与键或值进行比较? – user1614526

+0

我的字典看起来像{'a':10,'b':15,'c':12} – Kevvv

回答

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] 

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

+0

仍然错:缩进'def'下面的所有内容! –

+0

@AndrewJaffe哎呀!纠正。 –

+0

我试过你的代码,他们返回字典中的所有东西:( – Kevvv

0

将return语句向后移动两个选项卡,否则将返回大于n的第一个值。

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'] 
1

天真遍历一本字典给你的序列。不是

所以,做你想做什么,你需要itervalues

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

或者,正如其他人所指出的那样,使用列表理解。

此外,请勿使用dict作为名称,因为它会影响内建。