我正在使用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
我希望我的问题足够明确。 感谢。
答案 0 :(得分:0)
如果在源HTML中degree
和major
值彼此关联,那么找到包含每次迭代的下一个最高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