比较字典的方法

时间:2015-02-27 19:30:58

标签: python

我有一本字典:

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

第二个程序没有完成,原因有两个:

  1. 目前它正在返回一个错误,我无法看到我哪里出错了。
  2. 它只返回一个点积的列表(最相似的点积最大的那个),而我需要'键'谁拥有所选森的标量产品是最大的。
  3. 完全错误。

    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;对象不可迭代

2 个答案:

答案 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>