Python列表附加
我在这里试图解决一个问题,但我被卡住了。基本上我想做的是: 我收到一本字典,格式如下:Python列表附加,python,list,append,Python,List,Append,我在这里试图解决一个问题,但我被卡住了。基本上我想做的是: 我收到一本字典,格式如下: dr= {'student1067': ['0', '0', '0'], 'student1068' : ['1', '2', '5'], 'student1069': ['7','6','2'],..... SimList= [('student1067', 40), ('student1068', 40), ('student1069', 35).......] dr是一个字典,其中键是学生身份(例如
dr= {'student1067': ['0', '0', '0'], 'student1068' : ['1', '2', '5'], 'student1069': ['7','6','2'],.....
SimList= [('student1067', 40), ('student1068', 40), ('student1069', 35).......]
dr是一个字典,其中键是学生身份(例如:“student1068”),值是字符串列表,其中每个元素是特定书籍的评级
然后,我会收到一份类似列表,格式如下:
dr= {'student1067': ['0', '0', '0'], 'student1068' : ['1', '2', '5'], 'student1069': ['7','6','2'],.....
SimList= [('student1067', 40), ('student1068', 40), ('student1069', 35).......]
SimList是一个元组列表,其中元组的第一个元素是学生身份,第二个元素是相似性评级
我基本上想做的是遍历SimList中每个元组的第一个元素,并在dr中查找相同的键。如果第一个元素和键匹配,我想使用SimList中元组的第二个元素乘以dictionary值的所有元素。
例如,对于student 1067,字典中的值将全部乘以40。对于student 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”语句放错了位置,因为我的代码工作不正常。你们能帮帮我吗
非常感谢,
很抱歉问了这么长的问题。这对我来说很有用:
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:]))]
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时,您使用了项[0]进行乘法,而不是项[1] 好的,这将更新dr,这样每个学生密钥的值都将是当前列表值。你建议我如何做最后一部分,并根据索引在每个值列表中添加所有元素?非常感谢!谢谢。