Tôi mới dùng python và không thể tìm thấy câu trả lời cho điều này. Đề cập đến mã ở cuối thông báo, tôi có thể biết phần "cho mục, tổng số trong tổng số .tems()" trong dòng dưới đây có nghĩa là gì?AttributeError: đối tượng 'dict' không có thuộc tính
rankings = [(total/simSums[item], item) for item, total in totals.items()]
Ngoài ra, mã thất bại và nói
AttributeError: 'dict' object has no attribute 'predictors'
khi tôi thay đổi tất cả các trường hợp của "mục (s)" trong mã để "dự đoán (s)". Tại sao vậy?
# Return the Pearson correlation coefficient for p1 and p2
def sim_person(prefs, p1, p2):
# Get the list of shared_items
si={}
for item in prefs[p1]:
if item in prefs[p2]:si[item]=1
# Find the number of elements
n=len(si)
# if they have no ratings in common, return 0
if n==0: return 0
# Add up all the preferences
sum1 = sum([prefs[p1][it] for it in si])
sum2 = sum([prefs[p2][it] for it in si])
# Sum up the squares
sum1Sq = sum([pow(prefs[p1][it],2) for it in si])
sum2Sq = sum([pow(prefs[p2][it],2) for it in si])
# Sum up the products
pSum = sum([prefs[p1][it]*prefs[p2][it] for it in si])
# Calculate Person score
num = pSum - (sum1*sum2/n)
den = sqrt((sum1Sq - pow(sum1,2)/n)*(sum2Sq - pow(sum2,2)/n))
if den == 0: return 0
r = num/den
return r
# Returns the best matches for person from the prefs dictionary.
# Number of results and similarity function are optional params.
def topMatch(prefs, person, n=5, similarity=sim_person):
scores = [(similarity(prefs, person, other), other)
for other in prefs if other!=person]
# Sort the list so the highest scores appear at the top
scores.sort()
scores.reverse()
return scores[0:n]
# Gets recommendations for a person by using a weighted average
# of every other user's rankings
def getRecommendations(prefs, person, similarity=sim_person):
totals = {}
simSums = {}
for other in prefs:
# don't compare me to myself
if other == person: continue
sim = similarity(prefs, person, other)
# ignore scores of zero of lower
if sim<=0: continue
for item in prefs[other]:
# only score movies I haven't seen yet
if item not in prefs[person] or prefs[person][item]==0:
# Similarity * Score
totals.setdefault(item, 0)
totals[item]+=prefs[other][item]*sim
# Sum of similarities
simSums.setdefault(item, 0)
simSums[item]+=sim
# Create the normalized list
rankings = [(total/simSums[item], item) for item, total in totals.items()]
# Return the sorted list
rankings.sort()
rankings.reverse()
return rankings
Hãy chắc chắn rằng thụt đầu dòng là thích hợp trong bất kỳ mã bạn đăng, đặc biệt là mã Python, vì thụt đầu dòng ảnh hưởng đến hành vi của Python. – khelwood
Tôi nghĩ rằng bạn downvoters là một chút thô trên người mới. – bgusach
@bgusach: My _guess_ là downvotes là do thiếu nghiên cứu, vì 'dict.items' khá dễ tìm trong tài liệu. OTOH, tôi cho rằng các tài liệu Python chính thức có thể hơi đáng sợ nếu Python là ngôn ngữ lập trình đầu tiên của bạn, vì chúng là nhằm vào các lập trình viên dày dạn kinh nghiệm. –