python - 压缩两个不同大小的列表来制作字典

标签 python list dictionary

我有以下两个不同大小的列表,我想使用 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/

相关文章:

python - 为什么添加到列表会做不同的事情?

C# - 根据修改日期和创建日期对字典进行排序

Python:从格式化字符串中提取字段

python - 将数据框转换为列表列表

python - 如何更改 Django 中的模板框架?

python - 高效的项目装箱算法(itertools/numpy)

python - 将模块加载到 apache + mod-wsgi

JSON解析错误: Cannot deserialize value of type `java. util.LinkedHashMap<java.lang.String,java.lang.Double>

Java - "invalid stream header"ArrayList 的序列化

当经度/纬度值采用 DMS 格式时,Android 显示 map 位置