不存在的变量的操作符不受支持?

时间:2017-03-03 18:49:34

标签: python

我正在执行以下脚本:

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'

我不明白为什么当我的脚本中没有任何dict变量时,它说dict和dict之间有一些操作数。

1 个答案:

答案 0 :(得分: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