簡體   English   中英

在python中訪問字典中的列表列表

[英]Accessing list of lists within a dictionary in python

我正在嘗試編寫一個稱為計算的函數。

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

誰能建議幫助修改我的功能???

這就是您想要的,我認為很簡潔,您可以得到:

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

輸出:

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

=> [5.0,3.605551275463989]

本質上,您要做的就是遍歷第一個for循環中key列表長度中的每個元素,並通過每次迭代求和每個dict在位置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]

您當然可以壓縮此代碼,但這是一種希望與您的算法匹配的簡單方法。 測試一下以獲得更大的字典,看看它是否能滿足您的需求。

我認為您要說的是(使用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

也,

長度=計算(({'a':[[0,3],[1,3]],'b':[[0,4],[1,2]]})

需要結束語,並且

長度=計算(({'a':[[0,3],[1,3]],'b':[[0,4],[1,2]]})

長度[1]

長度[1] = 2.23

如果我上面的數學假設是正確的。 如果沒有,您需要更清楚地說明自己在做什么

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM