使用itertools和zip组合从两个不同长度的列表创建字典时出现问题



我希望键在每个字典中以相同的方式重复。也就是说,从A开始一直到e。但似乎itertools.cycle每次循环都会跳过一个。我还希望这些值遵循列表中的顺序(即,在第一个字典中从1开始,在最后一个字典中以15结束(。请参阅以下代码:

import itertools
allKeys=['A','B','C','D','E']
a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
g=itertools.cycle(allKeys)
b=[]
for i in range(3):
dishDict=dict(zip(g,a))
b.append(dishDict)
b

生成:

[{'A': 11, 'B': 12, 'C': 13, 'D': 14, 'E': 15},
{'B': 11, 'C': 12, 'D': 13, 'E': 14, 'A': 15},
{'C': 11, 'D': 12, 'E': 13, 'A': 14, 'B': 15}]

正如你所看到的,第二本字典中的键是从B开始的(而不是我希望的A(。此外,列表中所有三个字典中的值都是相同的。

这就是我希望输出的样子:

[{'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5},
{'A': 6, 'B': 7, 'C': 8, 'D': 9, 'E': 10},
{'A': 11, 'B': 12, 'C': 13, 'D': 14, 'E': 15}]

如果有人能告诉我发生了什么以及我应该做些什么来解决它,我真的很感激。我已经花了很多时间自己解决了它,还查看了itertools.cycle上的文档。但还没能弄清楚。

对于所需的输出,您不需要cycle():

allKeys=['A','B','C','D','E']
a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
it = iter(a)
b=[]
for i in range(3):
dishDict=dict(zip(allKeys,it))
b.append(dishDict)
print(b)

打印:

[{'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}, 
{'A': 6, 'B': 7, 'C': 8, 'D': 9, 'E': 10}, 
{'A': 11, 'B': 12, 'C': 13, 'D': 14, 'E': 15}]

最新更新