我有以下两个不同大小的列表,我想使用 zip()
函数将它们组合成一个字典。
stocks = ['CAT', 'IBM', 'MSFT']
prices = [20, 30, 40, 21, 31, 41, 22, 32, 42, 23, 33, 43]
这是我正在尝试做的事情:
from itertools import cycle
ziplist = []
ziplist.append(dict(zip(cycle(stocks), prices)))
我得到的输出是:
[{'CAT': 23, 'IBM': 33, 'MSFT': 43}]
我的预期输出应该是一个包含多个字典的列表:
[{'CAT': 20, 'IBM': 30, 'MSFT': 40}, {'CAT': 21, 'IBM': 31, 'MSFT': 41}, {'CAT': 22, 'IBM': 32, 'MSFT': 42}, {'CAT': 23, 'IBM': 33, 'MSFT': 43}]
最佳答案
使用 cycle
将不允许您看到除法。而是循环可计算的长度。您可以使用迭代器来跟踪您在价目表中的位置:
代码:
prices_iter = iter(prices)
data = [dict(zip(stocks, prices_iter)) for i in range(len(prices) // len(stocks))]
测试代码:
stocks = ['CAT', 'IBM', 'MSFT']
prices = [20, 30, 40, 21, 31, 41, 22, 32, 42, 23, 33, 43]
prices_iter = iter(prices)
data = [dict(zip(stocks, prices_iter)) for i in range(len(prices) // len(stocks))]
print(data)
结果:
[
{'IBM': 30, 'MSFT': 40, 'CAT': 20},
{'IBM': 31, 'MSFT': 41, 'CAT': 21},
{'IBM': 32, 'MSFT': 42, 'CAT': 22},
{'IBM': 33, 'MSFT': 43, 'CAT': 23}
]
关于python - 压缩两个不同大小的列表来制作字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48371760/