我正在尝试解决这里的问题并且卡住了。基本上我想要做的是: 我收到了一个格式的词典:
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”语句放置错误,因为我的代码无法正常工作。你能帮帮我吗?
非常感谢, 我很抱歉这个长期的问题。
答案 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]。