为了账号安全,请及时绑定邮箱和手机立即绑定

Python:编写嵌套 for 循环和 if 语句的更好方法

Python:编写嵌套 for 循环和 if 语句的更好方法

叮当猫咪 2023-06-20 14:07:28
我试图找到一种更 Pythonic 的方式来执行以下操作。for employee in get_employees:    for jobs in employee['jobs']:        for nemployee in employee_comps:            if nemployee['employee_id'] == employee['id']:                for njob in nemployee['hourly_compensations']:                    if njob['job_id'] == jobs['id']:                        njob['rate'] = jobs['rate']它有效但看起来笨重。我是 Python 的新手,如果有另一个线程可以帮助解决这个问题,请直接告诉我!
查看完整描述

1 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

我对代码的主要评论是您可以自由更改外部三个循环的顺序for,因为您正在执行的操作不依赖于您循环这些循环的顺序(因为您没有打破任何找到匹配项时循环),并且鉴于这种情况,仅进行循环jobs以到达if其中独立于 . 值的语句是没有意义的jobs。将循环放在其他两个循环内会更有效jobs,这样它也可以在 内if,即循环只对那些值的组合employee和条件求值的nemployee地方执行。ifTrue


除此之外但不太重要的是,for在进行此重新排列后有连续语句(独立的可迭代对象)时,您可以将它们替换为迭代器上的单个循环, itertools.product以减少循环嵌套的深度for(如果您愿意)(从四个减少到两个)显式循环):


from itertools import product


for employee, nemployee in product(get_employees, employee_comps):

    if nemployee['employee_id'] == employee['id']:

        for jobs, njob in product(employee['jobs'],

                                  nemployee['hourly_compensations']):

            if njob['job_id'] == jobs['id']:

                njob['rate'] = jobs['rate']


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信