我想将几个迭代器组合在一起,但是我希望这些值不是一个元组,而是命名为#34;,如dict
或namedtuple
。这将允许获得一些抽象和健壮性,因为我不需要确切地知道返回什么值或多少值,以及按什么顺序。
在python中有一种标准的方法吗?
答案 0 :(得分:3)
我在itertools
中找不到这样的工具,可能在其他地方?
与此同时,这个行为可以用这个简短的函数来实现:
def dictzip(**kwargs):
for values in zip(*kwargs.values()):
yield dict(zip(kwargs.keys(), values))
然后,例如,
>>> name = ['Alice', 'Bob', 'Claire']
>>> age = [11, 22, 33]
>>> email = ['alice@example.com', 'bob@example.com', 'claire@example.com']
>>> for val in dictzip(name=name, age=age, email=email):
... print('{name} {age} {email}'.format(**val))
...
Alice 11 alice@example.com
Bob 22 bob@example.com
Claire 33 claire@example.com
这也可用于迭代字典,"数组结构" -style:
>>> people = {
... 'name': ['Alice', 'Bob', 'Claire'],
... 'age': [11, 22, 33],
... 'email': ['alice@example.com', 'bob@example.com', 'claire@example.com']}
>>> for val in dictzip(**people):
... print('{name} {age} {email}'.format(**val))
...
Alice 11 alice@example.com
Bob 22 bob@example.com
Claire 33 claire@example.com
(编辑整合@ YannVernier关于格式化的建议)