簡體   English   中英

壓縮兩個不同大小的列表來制作詞典

[英]zipping two differently sized lists to make dictionaries

我有以下兩個不同大小的列表,並希望使用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}]

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

也許這個?

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))]

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作為默認值)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM