Python中如何将3个列表合并为字典,首个列表作键后两列表为对应值?
报错根因
- 内置
zip()传入3个列表时,会生成逐位置对齐的三元组序列,单条元素结构为(soc_db1元素, gain_db1元素, phase_db1元素) dict()构造函数的入参要求每一项必须是长度为2的键值对结构(即(key, value)二元组,或符合映射协议的对象),碰到长度为3的输入元素时,就会抛出指定的ValueError异常。
正确实现方法
目标字典结构为:字典键取soc_db1的同位置元素,对应的值为同位置gain_db1、phase_db1元素的组合,常用实现如下:
- 字典推导式(Python 2.7+ 原生支持,写法最简洁)
soc_gp_db = {soc: (gain, phase) for soc, gain, phase in zip(soc_db1, gain_db1, phase_db1)}- 若需要值为列表而非元组,只需将值部分的圆括号替换为方括号:
soc: [gain, phase] - 若需要值结构自带明确字段名方便后续取用,可将值构造为子字典:
soc: {"gain": gain, "phase": phase}
- 若需要值为列表而非元组,只需将值部分的圆括号替换为方括号:
- 生成器表达式转字典(兼容全版本Python3,逻辑直观)
soc_gp_db = dict((soc, (gain, phase)) for soc, gain, phase in zip(soc_db1, gain_db1, phase_db1))
注意事项
zip()会自动按传入列表的最短长度截断序列,若三个列表长度不一致,超出最短长度的元素会被静默丢弃,不会主动抛出异常- 作为字典键的
soc_db1元素必须为可哈希类型(如数值、字符串、元组),不可为列表、字典等可变类型,否则会触发TypeError
内容的提问来源于stack exchange,提问作者user14447985
相关产品推荐
相关产品推荐

