【问题标题】:How to Evaluate an Attribute Inside a Nested Python Dict Comprehension如何评估嵌套 Python 字典中的属性
【发布时间】:2013-12-15 22:31:10
【问题描述】:

运行以下代码时,Python2.7 会抛出 NameError。当第二个字典 paychecks 被评估时,就会发生这种情况。第一个字典 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 还是我的代码中的错误?还有什么更好的方法呢?

【问题讨论】:

    标签: python python-2.7 dictionary-comprehension


    【解决方案1】:

    您需要按照嵌套顺序列出循环;你有倒序。您还需要使用 dict.items() 方法来生成键 值。这有效:

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

    因为您需要在设置employee 之前先循环employees

    对于列表、字典和集合理解,将循环想象成嵌套的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 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 2016-02-12
      • 2018-04-01
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多