python中的相似性(3+)

时间:2019-11-22 15:47:43

标签: python

我已经用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'对象在打印语句中无法调用。

1 个答案:

答案 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_preferencedict对象,您不能这样调用。如果要通过键在字典中引用某个值,则应改用方括号[]。再说一次,如果您没有提供要执行的操作的实际示例,那么很难弄清问题出在哪里。

在这一点上,这可能是设计选择,或者您对字典的使用缺乏了解。

相关问题