如何用嵌套推导式优雅实现列表的列表转指定结构字典?
问题描述
我有一个列表的列表,想要将其转换为字典:字典的键为子列表中除第一个元素外的其余元素,值为对应子列表的第一个元素。目前已通过循环实现预期结果,希望找到更优雅的实现方式(比如推导式)。
原循环实现代码:
array = [ [1, 2, 3], [5, 4, 8] ] out = {} for x in array: y = x[0] z = x[1:] for k in z: out[k] = y
预期执行结果:
out = { 2 : 1, 3 : 1, 4 : 5, 8 : 5 }
优雅实现:字典推导式
可以用嵌套的字典推导式来实现,代码更简洁且逻辑和原循环完全一致:
array = [ [1, 2, 3], [5, 4, 8] ] out = {k: x[0] for x in array for k in x[1:]}
逻辑说明
- 外层遍历列表中的每个子列表
x - 内层遍历子列表中除第一个元素外的所有元素
k - 将每个
k作为字典的键,对应子列表的第一个元素x[0]作为值
执行后得到的结果和原循环完全相同:{2: 1, 3: 1, 4: 5, 8: 5}。如果存在重复的键,后面的键值对会覆盖前面的,这和原循环的行为保持一致。
内容的提问来源于stack exchange,提问作者MatPl
相关产品推荐
相关产品推荐

