目标是创建一个输出两个值的列表理解。
for 循环如下所示
paper_href_scopus = []
paper_title = []
for litag in all_td.find_all('a', {'class': 'ddmDocTitle'}):
paper_href_scopus.append(litag['href'])
paper_title.append(litag.text)
正如建议的OP https://stackoverflow.com/a/63203745/6446053,这可以通过以下方式实现
paper_href_scopus, paper_title = zip(*[(litag['href'], litag.text) for litag in all_td.find_all('a', {'class': 'ddmDocTitle'})])
然而,在某些情况下,all_td.find_all('a', {'class': 'ddmDocTitle'})
回报empty
并且编译器返回一个错误:
ValueError:没有足够的值来解压(预期为 2,实际为 0)
基于本文的讨论thread https://stackoverflow.com/questions/15474933/list-comprehension-with-if-statement,上面的代码似乎可以修改为
paper_href_scopus, paper_title = zip(
*((litag['href'], litag.text) for litag in all_td.find_all('a', {'class': 'ddmDocTitle'}) \
if all_td.find_all('a', {'class': 'ddmDocTitle'}
))
但编译器仍然返回错误
ValueError:没有足够的值来解压(预期为 2,实际为 0)
尽管如此,尽管在某些情况下,以下代码仍然有效all_td.find_all('a', {'class': 'ddmDocTitle'})
回报empty
[(paper_href_scopus.append(litag['href']), paper_title.append(litag.text)) \
for litag in all_td.find_all('a', {'class': 'ddmDocTitle'})]
但是,我想避免使用追加,因为需要初始化paper_href_scopus=[]
and paper_title=[]
预先。
我可以知道,我可以做什么来修复代码吗?
paper_href_scopus, paper_title = zip(
*((litag['href'], litag.text) for litag in all_td.find_all('a', {'class': 'ddmDocTitle'}) \
if all_td.find_all('a', {'class': 'ddmDocTitle'}
))