我有一本字典:
vd = {'Klein': [1,1,1], 'Fox-Epstein': [1,-1,0], 'Ravella': [-1,0,0]}
我需要一个迭代字典的过程,检查哪个条目与作为参数提供的条目最相似。我有两个程序,第一个嵌套在第二个程序中。
def policy_compare(sen_a, sen_b, voting_dict):
a = 0
for i in range(len(voting_dict[sen_a])):
a += voting_dict[sen_a][i] * voting_dict[sen_b][i]
return a
这将返回两个所选条目的点积。
def most_similar(sen, voting_dict):
a = []
for i in voting_dict.keys():
score = policy_compare(sen,i, voting_dict)
a += score
return a
第二个程序没有完成,原因有两个:
完全错误。
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
most_similar('Klein', vd)
File "/Users/anthony/Desktop/matrix/megalol.py", line 15, in most_similar
a += score
TypeError:&#39; int&#39;对象不可迭代
答案 0 :(得分:2)
a
是一个列表,score
是一个int。你不能将两者加在一起。迭代列表以获取内容以便将它们添加到另一个 - 因此&#34;怪异的&#34;错误。它不能迭代int(得分)以将其添加到列表(a)。
尝试a.append(score)
将分数添加到其末尾。
答案 1 :(得分:1)
以下是对您想要的解决方案的一些修改:
vd = {'Klein': [1,1,1], 'Fox-Epstein': [1,-1,0], 'Ravella': [-1,0,0]}
def policy_compare(sen_a, sen_b, voting_dict):
a = 0
for i in range(len(voting_dict[sen_a])):
a += voting_dict[sen_a][i] * voting_dict[sen_b][i]
return a
def most_similar(sen, voting_dict):
a = []
for this_sen in voting_dict.keys():
if this_sen == sen:
continue
score = policy_compare(sen, this_sen, voting_dict)
a.append((this_sen, score))
return max(a,key=lambda sen: sen[1])
print most_similar('Klein', vd)
正如其他人所说,您希望append
到您的列表a
。我已经将参议员的名字和点积一起添加到元组中(对于a
中的每个项目),因为字典键按任意顺序出现,你不知道哪个另一个是a
中的每个条目引用的。我已从most_similar
返回了最大点积条目。另外,为了避免将参议员与自己进行比较,你想要使用continue
(回到下一次迭代的循环开始),而不是pass
(什么也不做,继续当前的迭代)。 / p>