Я пытаюсь создать программу, в которой я могу ввести имя пользователя, и он будет использовать расстояние для человека, чтобы найти ближайшего человека.Неподдерживаемый тип операнда
Я продолжаю сталкиваться с этими ошибками, точнее, с ошибкой операнда. Как я могу это исправить?
Traceback ниже:
Traceback (most recent call last):
line 60, in <module> pprint(nearest_neighbor("Ricky", users))
line 52, in nearest_neighbor (pearson(ratings[username], ratings[other_user]),
line 22, in pearson square_sum1 = sum(pow(ratingsUser1.values(),2))
TypeError: unsupported operand type(s) for ** or pow(): 'dict_values' and 'int'
И вот мой код:
users = {"Ricky": {"Bob Seger": 4.75, "CCR": 4.5, "Beatles": 5, "The Who": 4.25, "Taylor Swift": 4},
"Meg": {"Bob Seger": 4, "CCR": 3, "Beatles": 5, "The Who": 2, "Taylor Swift": 1},
"Jake": {"Bob Seger": 4, "CCR": 3, "Beatles": 5, "The Who": 3, "Taylor Swift": 3}
}
def pearson(ratingsUser1, ratingsUser2):
# Summation over all attributes for both objects
sum_ratingsUser1 = sum(ratingsUser1.values())
sum_ratingsUser2 = sum(ratingsUser2.values())
# Sum the squares
square_sum1 = sum(pow(ratingsUser1.values(),2))
square_sum2 = sum(pow(ratingsUser2.values(),2))
# Add up the products
product = sum([ratingsUser1.values*ratingsUser2.values])
#Calculate Pearson Correlation score
numerator = product - (sum_ratingsUser1*sum_ratingsUser2/len(ratingsUser1))
denominator = ((square_sum1 - pow(sum_ratingsUser1,2)/len(ratingsUser1)) * (square_sum2 -
pow(sum_ratingsUser2,2)/len(ratingsUser1))) ** 0.5
# Can"t have division by 0
if denominator == 0:
return 0
result = numerator/denominator
return result
# Compute the Summation
# Compute the numerator
# Compute the denominator
def nearest_neighbor(username, ratings):
distances = []
for other_user in ratings:
if other_user != username:
distances.append(
(pearson(ratings[username], ratings[other_user]), other_user)
)
distances.sort()
return distances
from pprint import pprint
pprint(nearest_neighbor("Ricky", users))
Во-первых, вы должны отступы ваш код правильно. Во-вторых, хотите ли вы поднять все значения до мощности, а затем получить сумму результатов или суммировать все значения, а затем поднять результат до мощности? 'pow (sum (some_dictionary.values ()), 2)' # works 'sum (pow (some_dictionary.values ()), 2)' # не работает. Требуется итерация, для цикла, функции lamba, map и т. Д. Для применения операции к каждому элементу в 'dict_values'. Вы не можете использовать 'pow()' для нескольких элементов, подобных этому. – jDo