Python:编写嵌套for循环和if语句的更好方法
我正试图找到一种更具python风格的方法来做下面的事情 对于get_employees中的员工: 对于员工['jobs']中的工作: 对于员工薪酬中的非员工: 如果雇员['employee_id']==雇员['id']: 对于nemployee的njob[“小时补偿]: 如果njob['job_id']==jobs['id']: njob['rate']=工作['rate']Python:编写嵌套for循环和if语句的更好方法,python,for-loop,nested-for-loop,Python,For Loop,Nested For Loop,我正试图找到一种更具python风格的方法来做下面的事情 对于get_employees中的员工: 对于员工['jobs']中的工作: 对于员工薪酬中的非员工: 如果雇员['employee_id']==雇员['id']: 对于nemployee的njob[“小时补偿]: 如果njob['job_id']==jobs['id']: njob['rate']=工作['rate'] 它可以工作,但看起来很笨重。我是Python新手,如果有其他线程可以帮助我,请指导我 您拥有的代码非常干净且符合Py
它可以工作,但看起来很笨重。我是Python新手,如果有其他线程可以帮助我,请指导我 您拥有的代码非常干净且符合Python,我建议您继续使用它 如果你想把它放在一行中,这应该行得通,但我没有数据来测试它,所以我不确定
[[njob.update({njob['rate']:njob['rate']})如果njob['job\u id']==jobs['id']]对于雇员['jobs']中的雇员,对于雇员公司中的雇员,如果nemployee['employee\u id'==employee['id']
我对代码的主要评论是,您可以自由更改外部三个循环的顺序,因为您正在执行的操作不取决于在这些循环上循环的顺序(因为在找到匹配项时,您不会断开任何循环),如果是这样,执行jobs
循环时,只需在循环中到达一个独立于jobs
值的if
语句,是没有意义的。将作业
循环放在另外两个循环中会更有效,这样它也可以放在if
中,也就是说,循环仅针对员工
和员工
的值组合执行,其中if
条件的计算结果为真
除此之外,但不太重要的是,如果在执行此重排后,
语句(在独立的iterables上)存在连续的,则可以使用itertools.product
迭代器上的单个循环替换它们,以减少for
循环的嵌套深度(如果愿意)(将其从四个显式循环减少到两个):
你能发布原始数据/目录吗?我被第三个循环弄糊涂了。nemployee,employee_comps,njob是什么?你能详细说明你正在解决的问题吗?我不太理解你正在处理的目录/列表的结构。请发布你的数据的快照。这会有帮助吗:看看你正在尝试做什么这看起来很简单这是合乎逻辑的方法。你可以对数据进行一些预处理,这样你就可以避免“搜索整个数组以找到匹配项”的逻辑,然后使用字典来避免搜索循环。但是,由于匹配时不会出现循环,我必须假设每个循环都可以有多个匹配项。谢谢!这就是我一直在寻找的!
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']