访问 python 中字典中的列表列表
Accessing list of lists within a dictionary in python
我正在尝试编写一个名为 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
任何人都可以建议帮助修改我的功能吗???
我认为你想说的是(使用 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]]})
length[1]
length[1] = 2.23
如果我上面的数学假设是正确的。如果不是,你需要更清楚地解释你在做什么
如果我理解你想要正确的结果:
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]
您当然可以压缩此代码,但这是一种有望与您的算法相匹配的直接方法。用更大的字典测试一下,看看它是否能满足您的需求。
这就是您要找的内容,我认为您可以得到它的浓缩版:
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]]}))
=> [5.0, 3.605551275463989]
基本上你所做的就是在第一个 for
循环中遍历 key
列表长度中的每个元素,并且每次迭代都会对位置值的所有平方求和每个 dict
.
各 1 个
我正在尝试编写一个名为 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
任何人都可以建议帮助修改我的功能吗???
我认为你想说的是(使用 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]]})
length[1]
length[1] = 2.23
如果我上面的数学假设是正确的。如果不是,你需要更清楚地解释你在做什么
如果我理解你想要正确的结果:
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]
您当然可以压缩此代码,但这是一种有望与您的算法相匹配的直接方法。用更大的字典测试一下,看看它是否能满足您的需求。
这就是您要找的内容,我认为您可以得到它的浓缩版:
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]]}))
=> [5.0, 3.605551275463989]
基本上你所做的就是在第一个 for
循环中遍历 key
列表长度中的每个元素,并且每次迭代都会对位置值的所有平方求和每个 dict
.