使用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,'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}]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...