如何填充不均匀长度的 zip 列表?

How to fill a zip uneven length lists?

我正在使用 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

我希望我的问题足够清楚。 谢谢

如果 degreemajor 值在源 HTML 中相互关联,最好找到下一个包含这两个值的最高 DOM 元素对于每次迭代,然后迭代那些并在同一个循环中同时填充它们。

您可以使用 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}

非常感谢大家的投入和耐心等待。 根据 Kasra 提出的建议(我投票)我找到了这个解决方案(我添加了 institution 作为字典的关键字:

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