我已经用python创建了电影推荐系统,现在我正试图 找到两个用户之间的曼哈顿距离。
因此,我从2个文件中上传了必要的信息(用户ID,电影标题和评分),代码如下:
def LoadTheData():
movies={}
user_pref={}
for line in open('u.item'):
(movies_id, movie_title) = line.split('|')[0:2]
movies[movies_id] = movie_title
for line in open('u.data'):
(user_id, movie_id, rating) = line.split('\t')[0:3]
user_pref.setdefault(user_id,{})
user_pref[user_id][movies[movie_id] ] = float(rating)
return user_pref
User_preference=LoadTheData()
print(User_preference)
因此,我创建了User_preference词典,其中包含上述2个文件中的users_id,电影和评分。
User_preference = {'196': {'Kolya (1996)': 3.0, 'Mrs. Doubtfire (1993)':
4.0, "Muriel's Wedding (1994)": 4.0, 'Shall We Dance? (1996)': 3.0, 'Stand
by Me (1986)': 5.0,
现在我想计算2个用户之间的Manhattan差,我的公式是:
def manhattan_distance(User_preference,user1,user2):
for user1, user2 in User_preference(user1, user2):
return sqrt(sum(pow(user1-user2,2)))
print(manhattan_distance(User_preference,'100','206'))
但是,我遇到一个错误。有人知道我应该怎么写吗?
错误是''dict'对象在打印语句中无法调用。
答案 0 :(得分:2)
可能与那些倒数第二行中没有关闭的括号有关
def manhattan_distance(User_preference,user1,user2):
for user1, user2 in user_preference(user1, user2):
return sqrt(sum(pow(user1-user2,2))) #<---here
print(manhattan_distance(User_preference,'100','206'))
除此以外,()
表示对函数的调用。但是user_preference
是dict
对象,您不能这样调用。如果要通过键在字典中引用某个值,则应改用方括号[]
。再说一次,如果您没有提供要执行的操作的实际示例,那么很难弄清问题出在哪里。
在这一点上,这可能是设计选择,或者您对字典的使用缺乏了解。