/**
*@author zhuang_yongxin 2015/12/12
*/
from math import sqrt
#构造一个涉及影评者及其对几部影片评分情况的字典数据集
critics = {
'Lisa Rose':{
'Lady in the Water':2.5, 'Snakes on a Plane':3.5, 'Just My Luck':3.0,
'Superman Returns':3.5, 'You, Me and Dupree':2.5, 'The Night Listener':3.0
},
'Gene Seymour':{
'Lady in the Water':3.0, 'Snakes on a Plane':3.5, 'Just My Luck':1.5,
'Superman Returns':5.0, 'You, Me and Dupree':3.5, 'The Night Listener':3.0
},
'Michael Phillips':{
'Lady in the Water':2.5, 'Snakes on a Plane':3.0,
'Superman Returns':3.5, 'The Night Listener':4.0
},
'Claudia Puig':{
'Snakes on a Plane':3.5, 'Just My Luck':3.0,'Superman Returns':4.0,
'The Night Listener':4.5, 'You, Me and Dupree':2.5
},
'Mick LaSalle':{
'Lady in the Water':3.0, 'Snakes on a Plane':4.0, 'Just My Luck':2.0,
'Superman Returns':3.0, 'You, Me and Dupree':2.0, 'The Night Listener':3.0
},
'Jack Matthews':{
'Lady in the Water':3.0, 'Snakes on a Plane':4.0, 'Superman Returns':5.0,
'You, Me and Dupree':3.5, 'The Night Listener':3.0
},
'Toby':{
'Snakes on a Plane':3.5, 'Superman Returns':3.5, 'You, Me and Dupree':2.5
}
}
#返回一个有关person1和person2的基于距离的相似度评价defsim_distance(prefs, person1, person2):#得到shared_items的列表
si = {}
for item in prefs[person1]:
if item in prefs[person2]:
si[item] = 1#如果两者没有共同之处,返回0if len(si) == 0:
return0#计算所有差值的平方和
sum_of_squares = sum(pow(prefs[person1][item] - prefs[person2][item],2) for item in si)
return1/(1+sqrt(sum_of_squares))
if __name__ == '__main__':
print(sim_distance(critics, 'Lisa Rose', 'Gene Seymour'))