2010-07-01 1 views
4

하나의 사전 값을 두 번째 사전 값과 비교하려고합니다. 값이 특정 기준을 충족하면 일치하는 항목에 따라 키와 값 쌍이있는 세 번째 사전을 만들고 싶습니다.파이썬 : 조건부 일 경우 하나의 사전을 반복하고 새 사전에 키/값 쌍 만들기

여기 내 문제를 보여주는 고안된 예입니다.

편집 : 모든 반품에 대해 죄송합니다. 그러나 스택 오버플로는 단일 반품을 인식하지 못하고 한 줄로 3-4 줄을 실행하여 코드를 읽을 수 없습니다. 또한 코드로 내 코드를 회색으로 표시하지 않습니다. 이유를 모르겠다. 이것은 내가 갖는 것입니다

{0: {'best_paying_job': 'superintendent'}, 
1: {'other_job': 'social_studies_teacher'}} 

:

employee = {'skills': 'superintendent', 'teaches': 'social studies', 
      'grades': 'K-12'} 
school_districts = {0: {'needs': 'superintendent', 'grades': 'K-12'}, 
        1:{'needs': 'social_studies', 'grades': 'K-12'}} 
jobs_in_school_district = {} 
for key in school_districts: 
    if (employee['skills'] == school_districts[key]['needs']): 
     jobs_in_school_district[key] = {} 
     jobs_in_school_district[key]['best_paying_job'] = 'superintendent' 

    if (employee['teaches'] == school_districts[key]['needs']): 
     jobs_in_school_district[key] = {} 
     jobs_in_school_district[key]['other_job'] = 'social_studies_teacher' 

print(jobs_in_school_district) 

내가 'jobs_in_school_district'에 대한보고 싶은 값입니다

{1: {'other_job': 'social_studies_teacher'}} 

내가 잘못 여기에 이해. 파이썬은 첫 번째 if 블록 (라인 6-8) 다음에 jobs_in_school_district{0: {'best_paying_job': 'superintendent'}과 동일하게 설정합니다. 그런 다음 두 번째 if 블록을 실행합니다 (10 행). 그러나 11 행에서 {0: {'best_paying_job': 'superintendent'}을 겹쳐 쓰고 빈 dict를 다시 작성합니다. 그런 다음 할당 1 : { 'other_job': 'social_studies_teacher'} 행에서 jobs_in_school_district에 '12

하지만 두 블록의 각 jobs_in_school_district[key] = {} (라인 7, 11)을 제거하고 바로 이전에 하나를 넣어 경우 문이 같은 (새로운 라인 5) '에 대한'

jobs_in_school_district[key] = {} 

for key in school_districts: 
    if (employee['skills'] == school_districts[key]['needs']): 
     jobs_in_school_district[key]['best_paying_job'] = 'superintendent' 

    if (employee['teaches'] == jobs[key]['needs']): 
     jobs_in_school_district[key]['other_job'] = 'social_studies_teacher' 

print(jobs_in_school_district) 

너무, (나도 몰라, 그것이 내가 생각 루핑 정지)에만 'school_districts'딕셔너리의 첫 번째 키를 확인하고 중지됩니다 나는 이것을 얻는다 :

jobs_in_school_district = {0: {'best_paying_job': 'superintendent'} 

(나는 그것을 몇 번 다시 쓰려고 노력했다. 그리고 somet imes 대신 "핵심 오류"가 표시됨).

첫 번째 질문 : 두 번째 코드 블록이 왜 작동하지 않습니까? 두 번째 질문 : 작동하도록 코드를 작성하려면 어떻게해야합니까?

(나는 '다음'(방법 또는 기능)을 이해하지 못하고 무엇을하는지, 그래서 사용해야한다면 설명해 주시겠습니까?) 감사합니다.

+1

여기에서 코드 샘플의 형식을 지정하는 방법을 읽어야합니다.이 코드는 읽을 수 없습니다. –

+0

강제로 할 수있는 방법이 없다면 그것을 거부합니다. – Aquateenfan

답변

3

간단한 수정 (당신의 첫 번째 질문에 대한 답변) : key 제대로 최신 조각에 정의되지 않은, 할당은 내부 있어야 for 비록 if의 외부 :

for key in school_districts: 
    jobs_in_school_district[key] = {} 
    if ... etc etc ... 

    if ... other etc etc ... 

간단한 수도 실제로 "기본 dicts"대신 일반 사람 사용할 수 : 이제 [key] 색인에 할당을 제거 할 수 있습니다

import collections 
jobs_in_school_district = collections.defaultdict(dict) 

을하고 주어진 키에 대해 처음으로 필요한 경우 자동으로 수행됩니다.

0

보십시오 for 루프 후

jobs_in_school_district[key] = {} 

을 배치하지만, 만약 문 앞에.

서식을 읽을 수 없습니다.

+0

와우, 너무 쉬워. 감사. – Aquateenfan

0

social_studies를 밑줄없이 사회 연구로 변경하면 코드가 예상대로 작동합니다. 다음 내용을 참조하십시오 :

school_districts = {0: {'needs': 'superintendent', 'grades': 'K-12'}, 
        1:{'needs': 'social_studies', 'grades': 'K-12'}} 
관련 문제