我听说列表理解比嵌套for循环更有利
在Python课程中,我们学习for和while循环,而不是列表或字典理解。现在我正在努力改进我的代码。我通常是先在嵌套循环中写下我想要的东西,然后“翻译”成一个列表
在本例中,我尝试构建一个如下结构的词典:
{chemical_name_1 :
{field_1: xxxx
field_2: yyyy
field_3: zzzz}
{chemical_name_2 :
{field_1: xxxy
field_2: yyyz
field_3: zzzx}
...}
这是带有if语句的for循环,可以正常工作
wantedfields= ["ADI","General human health issues","CAS RN"]
results={}
for p in rand_links.keys():
tableText = [td.text.strip() for td in pesticideSoup[p].find_all("td", recursive=True)]
resd={}
for n,t in enumerate(tableText):
for field in wantedfields:
if field in t:
resd[t]=tableText[n+1]
results[p]=resd
其中杀虫汤是一本字典,从漂亮的汤里拉出来的。其结构如下:
{chemical_name_1 :
<!DOCTYPE html>
<html>
<head>some HTML code</head>,
chemical_name_2 :
<!DOCTYPE html>
<html>
<head>some HTML code</head>
}
rand\u links也是一个字典,简单地以化学名称作为键,URL作为值
这是我将嵌套for循环转换为字典的尝试:
results = {p: {t:tableText[n+1] if field in t} for field in wantedfields for t in [td.text.strip() for td in pesticideSoup[p].find_all("td", recursive=True)] for p in rand_links.keys()}
我希望得到与嵌套for循环相同的结果,但得到的却是语法错误
请您:
告诉我哪里出了问题,并帮助我纠正上述问题
告诉我怎样才能在这方面学得更好
您使用了哪些方法和资源来胜任这一特定技能
任何提示和帮助感谢
和任何与风格相关的东西一样,这在某种程度上是一个偏好的问题。对于代码来说,可读性是一个显著的好处
我认为上面的内容不如
所以在这种情况下,我倾向于理解。然而,作为你的例子,理解
在我看来,这是一个令人毛骨悚然的混乱局面。你想让别人写代码让你读吗?在多行上使用循环的“解包”版本可能更具可读性,因此尽管它占用了更多的代码行,但这将是我的首选
代码中的“更好”和“更差”是主观的——这取决于你想要什么。对于python非常适合的任务,代码可读性通常比以某种方式“优化”代码所获得的任何优势更有用
你必须从大的事情走向小的事情——重新安排你在听写理解中的“for”成为另一种方式
另外,对于嵌套的dict,请进行另一个理解,否则如果您的代码正常工作,您最多只能得到一个元素字典
记住,你可以在理解中使用普通函数您可以将单个事物作为函数进行解析,然后将
fun(pesticideSoup[p])
作为您的值为了便于阅读,代码可以分成多行
^这基本上就是你修改过的代码
它会崩溃,因为我不知道
tableText
在这个例子中实际意味着什么-实际上,我不理解你原来的for n,t in enumerate(tableText)
,或者因为你正在用tableText[n]:tableText[n+1]填充子目录(如果需要tableText[n])但这个版本实际上是可读的,而且你可能会更好地发现任何你可能犯下的错误(或者做我提到的功能。)
相关问题 更多 >
编程相关推荐