AttributeError: 'dict' objet n'a pas d'attribut

Je suis nouveau sur le python et ne pouvait pas trouver la réponse à cette question. Se référant au code à la fin du message, puis-je savoir quelle est la partie "pour le point, de total dans les totaux.les éléments()" dans la ligne en dessous de la moyenne?

rankings = [(total/simSums[item], item) for item, total in totals.items()]

Aussi, le code a échoué et a dit

AttributeError: 'dict' object has no attribute 'predictors'

quand j'ai changé toutes les instances de "élément(s)" dans le code "prédicteur(s)". Pourquoi donc?

# 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 
Assurez-vous que l'indentation est approprié, dans le code que vous publiez, en particulier le code Python, depuis le retrait affecte le comportement de Python.
Je pense que vous downvoters sont un peu rugueux sur les débutants.
Mon suppose que, c'est que les downvotes sont dues à un manque de recherche, depuis dict.items est assez facile de trouver de la documentation. Otoh, que, je suppose que l'officiel de Python docs peut être un peu intimidant si Python est votre premier langage de programmation, car ils sont destinés à des programmeurs chevronnés.
la recherche et la lecture des docs est le pain quotidien de tout programmeur, mais il y a longtemps ou pas si longtemps, nous avons tous été que n00b en demandant à l'évidence, sans la moindre idée par où commencer. Parfois, les gens oublient que c'est un Q&Un site, pas un plan strictement professionnel Q&Un site.

OriginalL'auteur Michael Lam | 2016-02-15