"命名"迭代器:压缩迭代器以将值作为字典而不是元组返回

时间:2018-05-09 13:32:51

标签: python itertools

我想将几个迭代器组合在一起,但是我希望这些值不是一个元组,而是命名为#34;,如dictnamedtuple 。这将允许获得一些抽象和健壮性,因为我不需要确切地知道返回什么值或多少值,以及按什么顺序。

在python中有一种标准的方法吗?

1 个答案:

答案 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关于格式化的建议)