2013-12-15 3 views
0

다음 코드를 실행하면 Python2.7이 NameError를 던집니다. 이것은 두 번째 dict 인 paychecks이 평가 될 때 발생합니다. 첫 번째 사전은 employees입니다.중첩 된 Python Dict 이해 내에서 속성을 평가하는 방법

employees = { employee.ID:employee for employee in company.employees } 

paychecks = { 
    paycheck.ID:paycheck for paycheck in employee.paychecks 
    for key, employee in employees 
    } 

!!! NameError: global name 'employee' is not defined 

이 코드는 내 Python이나 버그입니까? 그리고 그것을하는 더 좋은 방법은 무엇입니까?

답변

4

루프를 중첩 할 때와 동일한 순서로 나열해야합니다. 너는 순서가 거꾸로있다. 값을 모두 산출하려면 dict.items() 메서드를 사용해야합니다. 이 작품 :

paychecks = {paycheck.ID: paycheck 
    for key, employee in employees.items() 
    for paycheck in employee.paychecks} 

employee가 설정되기 전에 employees을 통해 첫 번째 루프를 필요로한다. 목록, DICT 및 설정 함축, 사진 중첩 for 문으로 루프를 들어

: 당신이 둥지에 당신이 그들을 지정된 순서로 루프 인 경우에 당신이 얻을 이유

for key, employee in employees.items(): 
    for paycheck in employee.paychecks: 
     paychecks[paycheck.ID] = paycheck 

은 즉시 명확해야 NameErroremployee에 :

for paycheck in employee.paychecks: 
    for key, employee in employees.items(): 
     paychecks[paycheck.ID] = paycheck 

여기서 외부 루프는 비 employee 기존 객체에 액세스하려고 시도.

+0

스폿이 켜져 있습니다. 건배. –

관련 문제