【问题标题】:How to combine two lists together that are being formed while iterating another list?如何在迭代另一个列表时将两个列表组合在一起?
【发布时间】:2017-05-07 21:47:58
【问题描述】:

我正在使用 scrapy 迭代地抓取一些数据,并且数据在每次迭代中都以两个列表的形式输出。我想在每次迭代时将这两个列表合并为一个列表,这样最后我将拥有一个包含许多子列表的大列表(每个子列表是每次迭代创建的两个列表的组合)

这可能会令人困惑,所以我将显示我当前的输出和代码:

使用 Scrapy 我正在以下列方式进行迭代,

for i in response.css(''tr.insider....."):
    i.css(a.tab-link:text).extract() #creating the first list
    i.css('td::text').extract() #creating the second list

所以当前的输出是这样的

[A,B,C]   #first iteration
[1,2,3]

[D,E,F] #second iteration
[4,5,6]

[G,H,I] #third iteration
[7,8,9]

想要的输出是

[[A,B,C,1,2,3], [D,E,F,4,5,6],[G,H,I,7,8,9]]

我尝试了以下代码,但得到了None 的列表。

x =[]

 for i in response.css(''tr.insider....."):
        x.append(i.css(a.tablink::text).extract().extend(i.css('td::text').extract()))

但回报只是

None
None 
None
None
None.....

谢谢!

【问题讨论】:

  • 每次迭代的顺序重要吗?如果没有,你可以试试i.css(a.tab-link:text, td::text).extract()
  • 感谢您的建议。我收到以下错误,输入错误css() takes exactly two arguments three given
  • 此解决方案似乎有效,与您提供的类似:i.css('a.tab-link:text, td::text').extract()

标签: python-2.7 list scrapy iteration


【解决方案1】:

extend 函数返回 None,所以你总是将 None 附加到 x。

为了你的目的,我这就是你想要的:

for i in response.css(''tr.insider....."): i.css('a.tab-link:text, td::text').extract()

【讨论】:

    【解决方案2】:

    您可以简单地将两个列表添加在一起并将它们附加到您的 results 列表中。

    results = []
    for i in response.css("tr.insider....."):
        first = i.css(a.tab-link:text).extract()
        second = i.css('td::text').extract()
        # combine both and append to results
        results.append(first + second)
    print(results)
    # e.g.: [[A,B,C,1,2,3], [D,E,F,4,5,6],[G,H,I,7,8,9]]
    

    【讨论】:

    • 这似乎有效。谢谢。我会检查写的其他答案,看看是否有更简洁的解决方案。
    猜你喜欢
    • 2020-03-30
    • 2021-09-19
    • 2021-10-22
    • 2021-08-09
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多