2013-07-16 87 views
0

這裏存儲多個值是我的代碼:字典不相同的密鑰

import math 

def distance(argv): 
    comp_diff = [] 
    for comp_1, comp_2 in argv.iteritems(): 
     comp_diff.append(comp_1-comp_2) 
     print comp_2 
    return math.sqrt(sum([math.pow(comp,2) for comp in comp_diff])) 

if __name__ == '__main__': 
    components = {0:4, 0:5, 0:4} 
    d = distance(components) 
    print d 

輸出是:

4 
4.0 

而應該是:

4 
5 
4 
5.1 

這是怎麼回事?我改變了組件字典的長度,並且顯然只有最後一個鍵值對出現並被迭代。爲什麼是這樣?請原諒我的Python新手。

+2

字典中的每個鍵只能有1個值。嘗試使用元組列表或類似的東西。 – wflynny

回答

3

你沒有正確使用字典:

>>> components = {0:4, 0:5, 0:4} 
>>> components 
{0: 4} 

您可以使用元組列表來代替。

import math 

def distance(argv): 
    comp_diff = [] 
    for comp_1, comp_2 in argv: 
     comp_diff.append(comp_1-comp_2) 
     print comp_2 
    return math.sqrt(sum([math.pow(comp,2) for comp in comp_diff])) 

if __name__ == '__main__': 
    components = [(0,4), (0,5), (0,4)] 
    d = distance(components) 
    print d 
+0

太棒了,我知道它必須是這樣簡單的東西。 – eatonphil

+0

如果你需要檢查是否定義了一個'point',你可以使用'set'而不是'list'。 – dnozay

2

字典每個鍵只能有一個值。 Python正在拋棄其中的兩個鍵值對。

(無關筆記,可以幫助你避免日後的麻煩:快譯通鍵值對是無序的,不要試圖依靠任何特定的迭代順序。)

相關問題