2010-08-06 4 views
9

의 목록을 병합 :방법은 다음과 같은 사전의 목록과 사전

user_course_information = [ 
    {'course_id': 1456, 'score': 56, 'name': 'History'}, 
    {'course_id': 316, 'score': 71, 'name': 'Science'}, 
    {'course_id': 926, 'name': 'Geography'} # Note: the student did not take this test 
] 

하거나 것 :

이 사전의 다음 목록로 결합하는 가장 좋은 방법은 무엇입니까
user_course_score = [ 
    {'course_id': 1456, 'score': 56}, 
    {'course_id': 316, 'score': 71} 
] 
courses = [ 
    {'course_id': 1456, 'name': 'History'}, 
    {'course_id': 316, 'name': 'Science'}, 
    {'course_id': 926, 'name': 'Geography'} 
] 

다음과 같이 데이터를 다르게 저장하는 것이 좋습니다.

courses = { 
    '1456': 'History', 
    '316': 'Science', 
    '926': 'Geography' 
} 

감사합니다.

+0

. 다른 답변 - 내가 사전으로 데이터를 재구성하라는 제안 - 잘 작동하지만 내 프로젝트를 위해 키로 ID를 사용하지 않을 것입니다. – Chris

답변

17

여기 가능한 해결책 : 그런 다음 사용자 별 데이터를 저장하기 위해 이런 일을 할 수

[{'course_id': 1456, 'name': 'History', 'score': 56}, 
{'course_id': 316, 'name': 'Science', 'score': 71}, 
{'course_id': 926, 'name': 'Geography'}] 

당신이 볼 수 있듯이를, 내가 사용 중간 지점으로 사전 ('병합'). 물론 데이터를 다르게 저장하여 단계를 건너 뛸 수 있지만 이러한 변수에 대한 다른 용도에 따라 달라집니다.

모두 최고입니다. 또한 시도 할 수

+0

완벽. 매우 감사합니다. – Chris

+0

안녕하세요. 나는 이것을 달성하기 위해이 방법을 사용하고 있지만 나의 dicts와리스트는 엄청납니다. 당신이 이것을하는 더 빠른 방법을 안다면 궁금합니다. 감사. –

3

사전은 기본적으로 (키, 값) 쌍의 목록입니다. 귀하의 경우

,

user_course_score 단지 (Course_ID에, 점수)의 사전 될 수 있습니다보다는 사전의 목록

유사

물론 그냥 사전 될 수있다 (당신은 불필요하게 그것을 복잡하게된다) 의 (Course_ID에 이름)는 말에서 제시 한 내용을

올바른 방법 :

2

라훌이 정확하다; 사전 목록은이를 수행하는 올바른 방법이 아닙니다. 이런 식으로 생각해보십시오. 사전은 데이터 조각 간의 매핑입니다. 마지막 예인 courses은 데이터를 저장하는 올바른 방법입니다.

def merge_lists(l1, l2, key): 
    merged = {} 
    for item in l1+l2: 
     if item[key] in merged: 
      merged[item[key]].update(item) 
     else: 
      merged[item[key]] = item 
    return merged.values() 

courses = merge_lists(user_course_score, courses, 'course_id') 

가 생산 :

courses = { 
    1456: 'History', 
    316: 'Science', 
    926: 'Geography' 
} # Note the lack of quotes 

test_scores = { 
    1456: { <user-id>: <score on History test> }, 
    316: { <user-id>: <score on History test> }, 
    926: { <user-id>: <score on History test> } 
} 
0

:

[ 
    course.update(score) for course 
    in courses for score in user_course_score 
    if course['course_id'] == score['course_id'] 
] 

:

그것이 내가 필요 정확히처럼 나는 아담의 대답을 수락
관련 문제