2013-11-23 143 views
0

我最近遇到了這個問題:我需要編寫一個函數,用於反向查找字典中的值並返回與該值成對的鍵列表。For循環和列表

我寫了兩個版本,第一個工作,但另一個不工作。但是,我不明白爲什麼。

def reverse_lookup(d, v): 
    l = [] 
    for k in d: 
     if d[k] == v: 
      l.append(k) 
    return l 

def reverse_lookup(d, v): 
    l = [] 
    for k in d: 
     if d[k] == v: 
      l = l.append(k) 
    return l 

無論如何第二個版本返回None。那有什麼問題?在我的理解中,我通過編寫l = l.append(k)來更新列表,所以我應該能夠收到所需的鍵列表。

回答

3

append函數返回None。所以,當你說

l = l.append(k) 

你重新分配Nonel。在下一次迭代中,您將嘗試調用None上的append函數,該函數不會在那裏。所以,你會有一個錯誤。但是如果只有一次迭代,那麼l現在有None並且將被返回。

順便說一句,你可以這樣做使用的理解,這樣的

return [key for key, value in d.items() if value == v]