运行以下代码时,Python2.7会抛出一个NameError。当评估第二个dict paychecks
时,就会发生这种情况。第一个dict employees
是好的。
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还是我代码中的错误?还有什么更好的方法呢?
您需要按照嵌套循环的顺序列出循环;你的订单倒过来了。您还需要使用dict.items()
方法来生成键和值。这项工作:
paychecks = {paycheck.ID: paycheck
for key, employee in employees.items()
for paycheck in employee.paychecks}
因为在设置CCD_ 5之前,您需要首先在CCD_。
对于列表、dict和集合理解,将循环描绘为嵌套的for
语句:
for key, employee in employees.items():
for paycheck in employee.paychecks:
paychecks[paycheck.ID] = paycheck
如果要按照指定的顺序嵌套循环,那么应该立即清楚为什么在employee
:上得到NameError
for paycheck in employee.paychecks:
for key, employee in employees.items():
paychecks[paycheck.ID] = paycheck
这里,外部循环尝试访问不存在的employee
对象。