2013-11-25 3 views
1

여기에서 문제를 해결하려고 노력 중입니다. 기본적으로 내가하고 싶은이다 : 나는 형식의 사전 주어진 오전 : ('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의 튜플의 두 번째 요소를 사용하여 사전 값의 모든 요소를 ​​곱하고 싶습니다. 예를 들어 학생 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

괜찮 으면 dr을 업데이트하여 각 학생 키의 값이 현재 목록 값이되도록합니다. 인덱스에 따라 최종 파트를 작성하고 각 값 목록의 모든 요소를 ​​추가하는 것을 어떻게 권장합니까? – 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에 목록을 추가하는 동안.