我有以下两种不同大小的列表,并希望使用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}]
我的预期输出应该是一个包含多个dicts的列表:
[{'CAT': 20, 'IBM': 30, 'MSFT': 40}, {'CAT': 21, 'IBM': 31, 'MSFT': 41}, {'CAT': 22, 'IBM': 32, 'MSFT': 42}, {'CAT': 23, 'IBM': 33, 'MSFT': 43}]
答案 0 :(得分:3)
使用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}
]
答案 1 :(得分:2)
也许这个?
stocks = ['CAT', 'IBM', 'MSFT']
prices = [20, 30, 40, 21, 31, 41, 22, 32, 42, 23, 33, 43]
[dict(zip(stocks,prices[i:i+len(stocks)])) for i in range(0,len(prices),len(stocks))]
答案 2 :(得分:2)
从prices
创建一个迭代器,然后构建子目录适当的次数,一次选择next
的值:
stocks = ['CAT', 'IBM', 'MSFT']
prices = [20, 30, 40, 21, 31, 41, 22, 32, 42, 23, 33, 43]
price_iter = iter(prices)
result = [{x:next(price_iter,0) for x in stocks} for _ in range(len(prices)//len(stocks)) ]
(在这种情况下,如果prices
太短,next
会因为第二个参数而将0作为默认值)