2017-03-03 19 views
-3

我執行下面的腳本:對不存在的變量不支持的操作?

dic1 = { 
     1:{2:3,3:1,5:4,6:3,7:5}, 
     2:{1:4,2:1,3:3,5:5,8:2}, 
     3:{1:2,2:1,4:5,8:1}, 
     4:{1:3,3:2,6:5,8:4} 
     } 

dic2 = { 
     1:{2:3,3:1,5:4,6:3,7:5}, 
     2:{1:4,2:1,3:3,5:5,8:2}, 
     3:{1:2,2:1,4:5,8:1}, 
     4:{1:3,3:2,6:5,8:4} 
     } 

from math import sqrt 

def distEuclidea(dic1, dic2): 
    suma2 = sum([pow(dic1[elem]-dic2[elem],2) 
       for elem in dic1 if elem in dic2]) 
    return sqrt(suma2) 

def similEuclidea(dic1, dic2): 
    return 1/(1+distEuclidea(dic1, dic2)) 


print (similEuclidea(dic1,dic2)) 

我得到

Traceback (most recent call last): 
    File "aplicacion_distancia_euclidea.py", line 28, in <module> 
    print (similEuclidea(dic1,dic2)) 
    File "aplicacion_distancia_euclidea.py", line 25, in similEuclidea 
    return 1/(1+distEuclidea(dic1, dic2)) 
    File "aplicacion_distancia_euclidea.py", line 21, in distEuclidea 
    for elem in dic1 if elem in dic2]) 
    File "aplicacion_distancia_euclidea.py", line 21, in <listcomp> 
    for elem in dic1 if elem in dic2]) 
TypeError: unsupported operand type(s) for -: 'dict' and 'dict' 

我不明白爲什麼它說,我有字典和詞典之間的一些操作的時候,我沒有任何字典的錯誤在我的腳本中變量。

+1

你認爲'{2:3,3:1,5:4,6:3,7:5}是什麼?字典... –

+0

你只有8個左右。你有什麼期望'dic1 [elem] -dic2 [elem]'呢? – njzk2

+4

錯誤信息中的''dict''不是指變量名,它指的是變量的* type *,因此錯誤信息「** TypeError **:不受支持的操作數**類型**的 - :'字典'和'字典'「。另外,在這種情況下的「操作數」是指負號('-')。它是說你不能從另一個字典中減去一個字典。換句話說,Python不能執行'{2:3,3:1,5:4,6:3,7:5} - {2:3,3:1,5:4,6:3,7 :5}'.' –

回答

1

dict是變量的類型,而不是變量本身。什麼是錯誤的意思是,你正試圖從另一個字典。減去一個字典:

suma2 = sum([pow(dic1[elem]-dic2[elem],2) 

你應該從字典中的值內dic1dic2爲,使用:

dic1[elem][something_else] 

dic2[elem][something_else] 

別的東西可以是:

  • 如果ELEM爲1:2,3,5,6,7
  • 如果ELEM爲2:1,2,3,5,8
  • 如果ELEM爲3:1,2,4,8
  • 如果ELEM是4:1,3,6,8-

至少根據內dict秒。