如何解决使用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}]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。