在Konrad Rudolph的回答中
zip 几乎可以满足您的需求;不幸的是,它没有循环较短的列表,而是中断了。也许有一个相关的循环功能?
这是一种方法:
keys = ['name', 'age']
values = ['Monty', 42, 'Matt', 28, 'Frank', 33]
iter_values = iter(values)
[dict(zip(keys, iter_values)) for _ in range(len(values) // len(keys))]
我不会称它为 Pythonic(我认为它太聪明了),但它可能是我们正在寻找的东西。
使用itertools.cycle() 循环keys 列表没有任何好处,因为每次遍历keys 对应于创建一个字典。
编辑:这是另一种方式:
def iter_cut(seq, size):
for i in range(len(seq) / size):
yield seq[i*size:(i+1)*size]
keys = ['name', 'age']
values = ['Monty', 42, 'Matt', 28, 'Frank', 33]
[dict(zip(keys, some_values)) for some_values in iter_cut(values, len(keys))]
这更像是pythonic:有一个具有明确目的的可读实用程序函数,其余代码自然地从中流出。