Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:编写嵌套for循环和if语句的更好方法_Python_For Loop_Nested For Loop - Fatal编程技术网

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

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风格的方法来做下面的事情

对于get_employees中的员工: 对于员工['jobs']中的工作: 对于员工薪酬中的非员工: 如果雇员['employee_id']==雇员['id']: 对于nemployee的njob[“小时补偿]: 如果njob['job_id']==jobs['id']: njob['rate']=工作['rate']
它可以工作,但看起来很笨重。我是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']