[英]AttributeError: 'dict' object has no attribute 'predictors'
我是 python 新手,找不到答案。 参考消息末尾的代码,我能知道下一行中的“for item, total in totals.items()”部分是什么意思吗?
rankings = [(total/simSums[item], item) for item, total in totals.items()]
另外,代码失败并说
AttributeError: 'dict' 对象没有属性 'predictors'
当我将代码中“item(s)”的所有实例更改为“predictor(s)”时。 为什么呢?
# 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
dict.items
迭代字典的键值对。 因此, for key, value in dictionary.items()
将遍历每一对。 这是文档信息,您可以在官方网页中查看,或者更简单,打开 python 控制台并键入help(dict.items)
。 现在,举个例子:
>>> d = {'hello': 34, 'world': 2999}
>>> for key, value in d.items():
... print key, value
...
world 2999
hello 34
AttributeError
是当对象不具有您尝试访问的属性时抛出的异常。 类dict
没有任何predictors
属性(现在您知道在哪里检查它:)),因此当您尝试访问它时它会抱怨。 就这么简单。
#Try without dot notation sample_dict = {'name': 'John', 'age': 29} print(sample_dict['name']) # John print(sample_dict['age']) # 29
product_details = {
'name':'mobile',
'company':'samsung'}
访问 product_details.name 将抛出错误“dict object has no attribute 'name'”。 原因是因为我们使用点 (.) 来访问 dict 项目。
right way is :
product_details['name']
我们使用点运算符从 python 中的对象访问值。
dictionary.items() 允许我们遍历字典中的键:值对
for key, value in product_details.items():
print(key,':',value)
对于循环的每次迭代,一个键和它的值被分配给这里的变量键和值。 这就是 items() 方法的工作原理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.