如何在for循环和if语句中简化for循环?

时间:2019-01-13 18:53:31

标签: python python-2.7 list-comprehension

我可以将此代码缩短为1-2行吗?

我尝试过使其成为列表理解,但是我不确定如果其中一个for循环使用字典键,它将如何工作。

for a in dict.keys():  
    for q in list:  
        if a in q:  
            dict[a].append(q)  

此代码很好地用于查找列表中的项是否为词典的键之一,如果是,则将其存储为该词典键下的值,但是我希望弄清楚是否可以进一步简化它。

2 个答案:

答案 0 :(得分:1)

最初,我想提出这个建议:

{k: v for v in mylist for k in mydict if k in v}

但是后来我注意到您实际上是在修改输入的内容,而不是正在发生的事情。实际上应该做同样的事情(我对输入有一个或两个假设):

for key in mydict.keys():
    mydict[key].extend((i for i in mylist if key in i))

但是一条不请自来的建议。该代码段确实不需要缩短。相反,它可以使用更多的冗长性和更具描述性的变量名来引导读者通读并帮助理解正在发生的事情。

在任何情况下,请不要使用dictlist之类的变量名,因为这些变量名已用于内置类型构造函数,这确实给将它们重新分配给其他变量带来麻烦。对象(在大多数情况下,即使经过仔细考虑和预期,我仍然建议不要这样做)。

答案 1 :(得分:-1)

如果需要,您可以将其转化为列表理解,例如:[my_dict[a].append(q) for a in my_dict for q in my_list if a in q],但是,正如您在评论中看到的那样,不建议这样做,实际上可能更难以阅读和理解。

循环用于迭代的内容并不重要。我花了一些时间来理解,for是按照它们在嵌套循环结构中的顺序编写的,而不是作为要求值的表达式而倒置的。