col*_*yre 4 python built-in python-itertools python-3.x
是否有一个像zip()一样工作的内置函数,但填充结果,以便结果列表的长度是最长输入的长度,并从左边填充列表,例如None?
已经有一个答案使用zip_longest从itertools模块和相应的问题是非常相似这一点.但zip_longest似乎你只能从右边填充缺失的数据.
这可能是一个用例,假设我们只存储了这样的名称(这只是一个例子):
header = ["title", "firstname", "lastname"]
person_1 = ["Dr.", "Joe", "Doe"]
person_2 = ["Mary", "Poppins"]
person_3 = ["Smith"]
Run Code Online (Sandbox Code Playgroud)
没有像(["Poppins", "Mary"],["Poppins", "Dr", "Mary"])等其他排列.
如何使用内置函数获得这样的结果?
>>> dict(magic_zip(header, person_1))
{'title': 'Dr.', 'lastname': 'Doe', 'firstname': 'Joe'}
>>> dict(magic_zip(header, person_2))
{'title': None, 'lastname': 'Poppins', 'firstname': 'Mary'}
>>> dict(magic_zip(header, person_3))
{'title': None, 'lastname': 'Smith', 'firstname': None}
Run Code Online (Sandbox Code Playgroud)
使用zip_longest反向列表.
示例:
from itertools import zip_longest
header = ["title", "firstname", "lastname"]
person_1 = ["Dr.", "Joe", "Doe"]
person_2 = ["Mary", "Poppins"]
person_3 = ["Smith"]
print(dict(zip_longest(reversed(header), reversed(person_2))))
# {'lastname': 'Poppins', 'firstname': 'Mary', 'title': None}
Run Code Online (Sandbox Code Playgroud)
关于你的用例:
>>> dict(zip_longest(reversed(header), reversed(person_1)))
{'title': 'Dr.', 'lastname': 'Doe', 'firstname': 'Joe'}
>>> dict(zip_longest(reversed(header), reversed(person_2)))
{'lastname': 'Poppins', 'firstname': 'Mary', 'title': None}
>>> dict(zip_longest(reversed(header), reversed(person_3)))
{'lastname': 'Smith', 'firstname': None, 'title': None}
Run Code Online (Sandbox Code Playgroud)
只需zip_longest反向使用和读取参数:
In [20]: dict(zip_longest(header[::-1], person_1[::-1]))
Out[20]: {'lastname': 'Doe', 'firstname': 'Joe', 'title': 'Dr.'}
In [21]: dict(zip_longest(header[::-1], person_2[::-1]))
Out[21]: {'lastname': 'Poppins', 'firstname': 'Mary', 'title': None}
In [22]: dict(zip_longest(header[::-1], person_3[::-1]))
Out[22]: {'lastname': 'Smith', 'firstname': None, 'title': None}
Run Code Online (Sandbox Code Playgroud)
由于zip*函数需要能够处理一般的迭代,它们不支持"从左边"填充,因为你需要先耗尽迭代.在这里,我们可以自己翻转事物.
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |