Система рекомендаций Manhattan Distance Python

Итак, я пробовал это некоторое время, но просто не могу заставить его работать. Если вы посмотрите на картинку, вы увидите 2 человека по осям x и y, и обе оценки — это оценки, которые они дали фильмам. И вопрос в том, как я могу рассчитать манхэттенское расстояние между этими людьми.

введите здесь описание изображения

так что это то, что у меня уже есть... редактировать я забыл сказать, что prefs - это словарь с именем пользователя в качестве ключа и вторым словарем в качестве значения. второй dict содержит фильмы как ключ и рейтинг как значение.. и person1 и 2 - это просто строки с именем, которые можно найти в префах

def sum_manhattan(prefs,person1,person2):
    """Calculates the Manhattan distance between two critics"""
    total = 0
    ##assume person1 is the x axes and person 2 is the y axes
    x = prefs[person1]
    y = prefs[person2]

    for movie in x:
        if movie in y:
            total = abs(x[movie]-y[movie])
    return total

любая помощь приветствуется :)


person Musti Hakan    schedule 17.04.2013    source источник
comment
Что именно не работает? Я вижу, что в цикле вы выполняете total = abs(...). Это то, что вы делаете в своей программе, или вы опечатались в вопросе?   -  person civilu    schedule 17.04.2013
comment
Должны ли мы предположить, что prefs, person1 и person2 структурированы так же, как и в «Программировании коллективного разума» (откуда было взято изображение)? answers.oreilly.com/topic/< /а>   -  person Alkini    schedule 17.04.2013
comment
извините .. да, это именно то, что есть, но это то, что дал мне мой профессор, и я забыл сказать, что prefs - это dict с именем человека в качестве ключа и вторым dict в качестве значения. второй dict содержит фильмы как ключ и рейтинг как значение.. и person1 и 2 - это просто строки с именем, которые можно найти в префах   -  person Musti Hakan    schedule 17.04.2013


Ответы (1)


Основываясь на ссылке, опубликованной Алкини, я бы сказал, что вы должны заменить

total = abs(x[movie]-y[movie])

с

total += abs(x[movie]-y[movie])

чтобы все работало.

Код, который вы разместили, возвращает абсолютное значение разницы между рейтингами последнего фильма, в то время как я думаю, вам нужно добавить различия рейтингов для всех фильмов.

person civilu    schedule 17.04.2013
comment
ага, вот оно! очень глупо с моей стороны не видеть этого :P но в любом случае спасибо! - person Musti Hakan; 17.04.2013