Python:从多个数组构建指定结构的复杂嵌套字典
错位结果的核心原因
- 你之前写的推导式之所以生成不符合预期的结果,是因为
zip(array1, array2, array3, array4)会把四个数组按下标位置逐次配对,每次迭代取出的是单个独立元素(首轮迭代取出apple、cola、cookies、burger,第二轮取出orange、fanta、sweets、pizza,以此类推),而非完整的数组对象,最终每个键绑定的是拆解后的零散子项,和你要求的“完整嵌套整个数组”的结构完全不符。
符合目标结构的实现代码
你需要的字典逻辑很直接:遍历array1的所有元素作为字典的键,每个键对应的取值是固定嵌套了array2、array3、array4整体的列表,不需要对另外三个数组做逐位拆解。
最简可直接运行的字典推导式写法:
complex_dict = { fruit: [[array2], [array3], [array4]] for fruit in array1 }
运行这段代码得到的结构和你列出的预期完全一致,实际输出示例:
{ 'apple': [ [['cola', 'fanta', 'sprite']], [['cookies', 'sweets', 'chocolate']], [['burger', 'pizza', 'pasta']] ], 'orange': [ [['cola', 'fanta', 'sprite']], [['cookies', 'sweets', 'chocolate']], [['burger', 'pizza', 'pasta']] ], 'lemon': [ [['cola', 'fanta', 'sprite']], [['cookies', 'sweets', 'chocolate']], [['burger', 'pizza', 'pasta']] ] }
易踩坑提示
- Python中的列表是可变引用类型,上述基础写法里,所有键对应的内层嵌套列表,都指向同一个原始array2、array3、array4的内存地址。如果后续需要单独修改某个键下的数组内容、不影响其他键的取值,需要在嵌套时对原始数组做深拷贝,避免修改时联动波及所有键的取值,参考写法:
from copy import deepcopy complex_dict = { fruit: [[deepcopy(array2)], [deepcopy(array3)], [deepcopy(array4)]] for fruit in array1 }
内容的提问来源于stack exchange,提问作者randomuser
相关产品推荐
相关产品推荐

