如何填写拉链不均匀长度列表?

时间:2015-02-18 20:57:27

标签: python list dictionary beautifulsoup missing-data

我正在使用Beautifulsoup解析文件,并在字典中构建2个列表作为值。

degree = []
for h5 in soup.find_all("info", "degree"):
    degree.append(h5.text.encode("utf-8"))

print degree

major = []
for h5 in soup.find_all("info", "major"):
    major.append(h5.text.encode("utf-8"))

print major

有时每个列表的长度不同(缺少值)。 在构建字典之前,如何确保检测到这一点,以便添加"None"值?

我尝试使用:

for k in set(major).difference(degree):
    degree[k] = "None"

但它没有用。

TypeError: list indices must be integers, not str

我希望我的问题足够明确。 感谢。

3 个答案:

答案 0 :(得分:0)

如果在源HTML中degreemajor值彼此关联,那么找到包含每次迭代的下一个最高DOM元素可能会更好,然后迭代超过这些并在同一循环中同时填充。

答案 1 :(得分:0)

您可以使用itertools.izip_longest创建字典,例如:

>>> from itertools import izip_longest
>>> degree=[1,2,3]
>>> major=['a','b','c','d']
>>> dict(izip_longest(major,degree))
{'a': 1, 'c': 3, 'b': 2, 'd': None}

答案 2 :(得分:0)

非常感谢你们的投入和耐心。 基于Kasra(我投票)的建议,我发现了这个解决方案(我将机构添加为词典的关键词:

educ_list = []
data = {x : [y, z] for x,y,z in zip(inst, degree, major)}
for i in itertools.izip_longest(inst, degree, major):
    educ_list.append(i)
print educ_list