Python列表追加

时间:2013-11-25 06:13:10

标签: python list append

我正在尝试解决这里的问题并且卡住了。基本上我想要做的是: 我收到了一个格式的词典:

dr= {'student1067': ['0', '0', '0'], 'student1068' : ['1', '2', '5'], 'student1069': ['7','6','2'],.....

dr是一个字典,其中键是学生身份(例如:'student1068'),值是字符串列表,其中每个元素是特定书籍的评级。

然后我会以格式给出相似性列表:

SimList= [('student1067', 40), ('student1068', 40), ('student1069', 35).......]

SimList是元组列表,其中元组的第一个元素是学生身份,第二个元素是相似度。

我基本上想要做的是浏览SimList中每个元组的第一个元素,并在dr中查找相同的键。如果第一个元素和键匹配,我想使用SimList中元组的第二个元素乘以字典值的所有元素。 因此,例如,对于学生1067,字典中的值将全部乘以40.对于学生1068,字典中的值也将全部乘以40。对于学生1069,所有值将乘以35。 最后,我想要一个列表,其中所有这些值被加在一起。

student1067---40 * [0,0,0] = [0,0,0]

student1068---40 * [1,2,5] = [40,80,200]

student1069---35 * [7,6,2]  = [245,210,70]

--------------------------------

Final List= [285, 290, 270]

所以基本上我希望通过添加各个索引值来获得最终列表结果。到目前为止我的代码看起来像这样:

    FinalList=[]
    for item in SimList:
        CurrentList=[]
        if item[0] in dr:
            CurrentList.append(item[0]*int(x) for x in dr[item[0]])
        if FinalList==[]:
            FinalList=CurrentList
        else:
            FinalList=[FinalList[i] + CurrentList[i] for i in range(len(FinalList))]
   print FinalList

所以FinalList是我的最终列表,而CurrentList是为每个学生创建的临时列表,每次运行该函数时都会返回到空列表。但是,我认为我将FinalList的“if”和“else”语句放置错误,因为我的代码无法正常工作。你能帮帮我吗?

非常感谢, 我很抱歉这个长期的问题。

2 个答案:

答案 0 :(得分:3)

FinalList = [(k, [int(i)*v for i in dr[k]]) for k, v in SimList]
TotalList = [sum(x) for x in zip(*(j for i in FinalList for j in i[1:]))]

答案 1 :(得分:0)

这对我有用:

dr= {'student1067': ['0', '0', '0'], 'student1068' : ['1', '2', '5'], 'student1069': ['7','6','2']}
SimList= [('student1067', 40), ('student1068', 40), ('student1069', 35)]
FinalList=[]

for item in SimList:
    CurrentList = []
    if(item[0] in dr):
        CurrentList.append([ item[1] * int(x) for x in dr[item[0]]])
    if(FinalList==[]):
        FinalList=CurrentList
    else:
        FinalList=[FinalList[i]+CurrentList[i] for i in range(len(FinalList))]
print FinalList

事实证明,在将列表附加到CurrentList时,您使用item [0]进行乘法而不是item [1]。