【问题标题】:python one variable contains lists. how to combine into a list [duplicate]python 一个变量包含列表。如何组合成一个列表[重复]
【发布时间】:2018-11-29 14:54:45
【问题描述】:

我从网站上抓取数据,并使用一个变量来包含所有数据列表。

x = [a,d,d,d] [a,f,f,f] [a,f,g,r]

如何将它们放入如下列表中:

x = [[a,d,d,d],[a,f,f,f],[a,f,g,r]]

我使用的代码:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import csv

url = "http://www.dicj.gov.mo/web/en/information/DadosEstat_mensal/2018/report_en.xml?id=5"
html = urlopen(url)
soup = BeautifulSoup(html, 'xml')

my_data = soup.find_all('RECORD')[0:]
for tds in my_data:
   x = [i.get_text() for i in tds.find_all('DATA')]
   print(x)

【问题讨论】:

  • 顺便说一句,在您的代码中,my_data = soup.find_all('RECORD')[0:] 中的 [0:] 没有任何用途,因此您可以将其删除。它本质上意味着选择从第零个索引到列表末尾的所有列表元素。
  • @AbhinavSood 谢谢提醒!
  • @TimCastelijns 我以前读过这个问题,但当时我不明白。由于我是新来的,如果这个问题是重复的,我应该删除它吗?
  • @FramerB 您没有义务删除您的问题,特别是如果您没有发现链接的重复项有用。如果有足够多的其他人投票认为它是重复的,它将被自动标记为一个。
  • @khelwood 知道了!谢谢

标签: python web-scraping beautifulsoup lxml


【解决方案1】:

因此,您每次通过 for 循环都会有一个新的 x。您可以将每个 x 附加到列表中。

xs = []
for tds in my_data:
    x = [i.get_text() for i in tds.find_all('DATA')]
    print(x)
    xs.append(x)

或者您可以使用列表推导式并在一行中完成所有操作。

xs = [[i.get_text() for i in tds.find_all('DATA')] for tds in my_data]

【讨论】:

  • 这肯定是骗人的
  • 对于第一个建议,当我尝试编写时: print(xs.append(x)) ,输出全部为 'NONE' 但第二个有效!
  • 它们都有效。他们产生相同的最终列表xs。尝试打印 xs.append(x) 毫无意义,因为 list.append 总是返回 None。
猜你喜欢
  • 2013-02-20
  • 2013-12-15
  • 2018-10-14
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多