有没有OrderedDict的推导式?

36

我不知道是否有这样的东西 - 但我正在尝试做一个有序字典解析。然而它似乎不起作用?

import requests
from bs4 import BeautifulSoup
from collections import OrderedDict


soup = BeautifulSoup(html, 'html.parser')
tables = soup.find_all('table')
t_data = OrderedDict()
rows = tables[1].find_all('tr')
t_data = {row.th.text: row.td.text for row in rows if row.td }

现在它被留作普通字典推导式(我也省略了通常的 requests to soup 样板)。

任何想法?


1
不,没有 OrderedDict 推导式这样的东西,你只会得到一个普通的字典。你之前将 OrderedDict 分配给该名称的事实是无关紧要的。 - jonrsharpe
创建一个空字典,然后使用OrderedDict或任何字典通过dict comp向其中添加元素是不可能的。一旦重新绑定名称“t_data”,它就不再指向您的OrderedDict。 - Padraic Cunningham
1个回答

80

你不能直接使用 OrderedDict 来进行推导。不过,你可以在构造函数中使用生成器来创建 OrderedDict

试试这个:

import requests
from bs4 import BeautifulSoup
from collections import OrderedDict


soup = BeautifulSoup(html, 'html.parser')
tables = soup.find_all('table')
rows = tables[1].find_all('tr')
t_data = OrderedDict((row.th.text, row.td.text) for row in rows if row.td)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接