在python中访问字典中的列表列表

时间:2015-02-13 19:09:55

标签: python list dictionary

我试图编写一个名为compute的函数。

import math
def compute(index):
    res=0
    x=0
    res = sum(val[-1] * val[-1] for key,val in index.items())
    x = math.sqrt(res)
    return x

我的输出:

>>compute({'a': [0, 3], 'b': [0, 4]})
5.0

在上面的示例索引中,文档0有两个术语' a' (与         tf-idf权重3)和' b' (使用tf-idf权重4)。它的长度是         因此5 = sqrt(9 + 16)。

现在如何访问字典中的列表元素列表? 例如,compute({'a': [[0, 3]], 'b': [[0, 4]]})

这样我想要的输出就像这样,

期望的输出:

>>length = compute(({'a': [[0, 3]], 'b': [[0, 4]]})
>>length[0]
5.0

这样就可以分别对每个列表进行计算。 例如,如

>>length = compute(({'a': [[0, 3],[1,3]], 'b': [[0, 4],[1,2]]})
>>length[1]
3.6

有人建议帮助修改我的功能???

3 个答案:

答案 0 :(得分:2)

这就是你要找的东西,因为我认为你可以得到它:

import math

def compute(index):
    count = 0
    res=0
    listy = [] 
    for i in range(len( index[ index.keys()[0] ] )):
        res = sum(val[i][-1]*val[i][-1] for key,val in index.items())
        listy.append(math.sqrt(res))
    return listy

<强>输出:

  

compute(({'a':[[0,3],[1,3]],'b':[[0,4],[1,2]]})))

     

=&GT; [5.0,3.605551275463989]

基本上你所做的就是迭代第一个key循环中for列表长度中的每个元素,并且每次迭代将位置1的值的所有平方相加各自dict

答案 1 :(得分:1)

如果我理解你想要的结果是正确的:

import math

def compute_lengths(d):
    l = []

    for i in xrange(len( d[ d.keys()[0] ] )):
        ## len is number of inner lists within an outer list

        sum = 0
        for v in d.values():
            sum += (v[i][-1]) ** 2

        l.append(math.sqrt(sum))

    return l


d = {
    'a': [ [0, 3], [1, 3] ],
    'b': [ [0, 4], [1, 2] ]
}

l = compute_lengths(d)
print l

[5.0, 3.605551275463989]

你当然可以压缩这段代码,但这是一种直截了当的方法,希望能与你的算法相匹配。测试一下这个更大的字典,看看它是否能给你你想要的东西。

答案 2 :(得分:0)

我认为你想说的是(使用x和y来避免混淆)

length = sqrt((x[1] - x[0])^2 + (y[1] - y[0])^2)

x = [4,7]
y = [5,9]
length = 5

但是您有额外的列表顺序。所以你只需像往常那样再次索引它。

def compute(index):
    output = []
    for i in range(0,len(index['a'])): #no error checking to ensure len(index['a']) == len(index['b'])
        output.append(math.sqrt(math.pow(index['a'][i][1]-index['a'][i][0],2)+math.pow(index['b'][i][1]-index['b'][i][0],2)))
    return output

另外,

length = compute(({'a':[[0,3],[1,3]],'b':[[0,4],[1,2]]})

需要一个闭幕式,

  

length = compute(({'a':[[0,3],[1,3]],'b':[[0,4],[1,2]]})

     

长度[1]

     

长度[1] = 2.23

如果我上面的数学假设是正确的。如果没有,你需要更清楚地解释你在做什么