如何填充不均匀长度的 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
我希望我的问题足够清楚。
谢谢
如果 degree
和 major
值在源 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
我正在使用 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
我希望我的问题足够清楚。 谢谢
如果 degree
和 major
值在源 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