2

如何构建一个接收字典的函数,例如:-

dic = {'a':0.4, 'b':0.2, 'c':0.1, 'd':0.5}

和列表列表:-

l = [['a','red',1],['c','green', 4],['b','blue', 5]]

这样我就可以在字典中映射列表的字母并返回它们的标准化值,如下所示:

result = sqrt((0.4^2) + (0.1^2) + (0.2^2))

这是我的尝试:

from numpy.linalg import norm
def normalizing(dic, l1):
    result = []
    for i in dic:
        if i in l1:
            result.append(dic[i])
    return norm(result)

返回 0.0

非常感谢您的帮助!

4

3 回答 3

0
dic =  {'a': 0.4, 'c': 0.1, 'b': 0.2, 'd': 0.5}
l = [['a', 'red', 1], ['c', 'green', 4], ['b', 'blue', 5]]

import math

def normalizing(dic, l):
    result = []
    for i in dic:
        if i in [j[0] for j in l]:
            result.append(dic[i])

    print result #[0.4, 0.1, 0.2]
    return math.sqrt(sum(k*k for k in result))

结果 :-

>>>normalizing(dic, l)
0.45825756949558405
于 2013-08-30T13:08:21.770 回答
0

由于您执行 for 循环的方式,您的结果为 0:

for i in dic: # for every letter in the dictionary
    if i in l1:  # if that letter is one of the elements of the list l1

在您的示例中,i 绝不是 l1 的元素之一,而是 ["a", "red", 1],例如。您正在将一个字母与该列表进行比较,当然它会告诉您它没有找到它。

假设您从来没有超过“列表中的列表”,也就是说,假设您不需要逐级迭代递归,那么可以工作的代码是:

import math
for letter in dic:
    for element in l1:
        if letter in element:
            result.append(dic[letter]**2 * element.count(letter))
return math.sqrt(sum(result))
于 2013-08-30T12:40:03.610 回答
0

如果数组 'l' 的元素 'a'、'b'、'c' 是唯一的,则可以使用字典:

def normalizing(dic, l1):
    result = []      
    for i in dic:
        if any(i in row for row in l1):
            result.append(dic[i]) 
    return norm(result)

    Output: 0.458257569496
于 2013-08-30T12:45:05.030 回答