如何在嵌套Python Dict理解中评估属性



运行以下代码时,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对象。