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

标签 python-3.x loops dictionary python-itertools cycle

我希望键在每个字典中以相同的方式重复。 IE。从 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}]

关于python-3.x - 组合使用 itertools 和 zip 从两个不同长度的列表创建字典时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64093063/

相关文章:

python - 并发.futures.ThreadPoolExecutor不打印错误

python - 在 Python 数据集中按条件过滤

java - "Invalid Response"再次选择怎么说? ( java 语)

python - 如何在每个命令后停止 python3 打印引用计数

python - 无效语法指向 python 中的 "return"

java - 求正数列表的算术平均值

c++ - C++ 中矩阵类的性能

python - 如何使用嵌套字典映射数据框中的列?

c# - 从字典中组合 "Check Add or Fetch"

Python,XML 结构到字典