2013-11-25 196 views
1

我想解決一個問題,並已陷入困境。基本上我想要做的是這樣的: 我給出的格式的詞典:Python列表追加

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

博士是一本字典,其中鍵是學生身份(如:「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」語句的錯誤,因爲我的代碼工作不正常。你們能幫我嗎?

非常感謝, 我對這個長問題感到抱歉。

回答

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:]))] 
+0

好吧,這將更新博士,以便每個學生鍵的值將是當前列表值。你如何建議我做最後的部分,並根據指數在每個值列表中添加所有元素? – user2904796

+0

關於downvote當你編輯它.. +1 :) – aIKid

+0

非常感謝!欣賞它。 – user2904796

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 

原來,你使用的項目[0]乘法,而不是項目[1],而追加列表爲CurrentList。